String 在Swift中,如何检查对象(AnyObject)是否为字符串?
尝试使用:String 在Swift中,如何检查对象(AnyObject)是否为字符串?,string,swift,String,Swift,尝试使用: obj.isKindOfClass(String) 但是它说类型“String”不符合协议“AnyObject” 那么,如何判断对象是否是字符串呢 此问题的上下文是UIActivity方法prepareWithActivityItems,我需要在其中保存活动项,但如果有多个活动项,如何确定哪个是哪个?检查: obj is String // true or false 转换: obj as? String // nil if failed to convert 可选绑定: if
obj.isKindOfClass(String)
但是它说类型“String”不符合协议“AnyObject”
那么,如何判断对象是否是字符串呢
此问题的上下文是UIActivity方法prepareWithActivityItems,我需要在其中保存活动项,但如果有多个活动项,如何确定哪个是哪个?检查:
obj is String // true or false
转换:
obj as? String // nil if failed to convert
可选绑定:
if let str = obj as? String {
// success
} else {
// fail
}
我要做一点切线,这样你们就能明白发生了什么 字符串不是swift中的对象强> 有点??? 因为免费搭桥的方式。。。如果导入Objective-C运行时,则可以将字符串视为对象。。。看看这个: 此代码根本不会编译:
// Playground - noun: a place where people can play
// import Foundation
var foo: AnyObject = "hello"
^ Type 'String' does not conform to protocol 'AnyObject'
但是如果我不注释基础框架,那么它编译得很好,因为我们正在激活字符串和NString:
之间的桥接。// Playground - noun: a place where people can play
import Foundation
var foo: AnyObject = "hello" // We're all good here!
如果你想检查foo是否是字符串。。。您可以这样做:
import Foundation
var foo: AnyObject = "hello"
foo.isKindOfClass(NSString) // this returns true
所以。。。字符串不是对象,但如果将其视为一个对象,它将转换为NSString
,现在它是一个对象。但是您不能检查对象是否属于String
类,因为不存在String
对象。您必须使用NSString
当然,你仍然应该像斯科特在回答中说的那样,使用
is
或as?
关键字。这很简单。也在文档中。哎呀。谢谢你的详细回复