尝试使用:
obj.isKindOfClass(String)
但是它说Type'String'不符合协议'AnyObject'
那你怎么知道一个对象是不是一个字符串呢?
这个问题的上下文是UIActivity方法,prepareWithActivityItems,我需要保存活动项,但如果有多个活动项,你怎么知道哪个是哪个?
答案 0 :(得分:21)
检查:
obj is String // true or false
转换:
obj as? String // nil if failed to convert
可选绑定:
if let str = obj as? String {
// success
} else {
// fail
}
答案 1 :(得分:4)
我会稍微切断一下,以便了解发生了什么。
字符串不是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'
但如果我取消注释Foundation框架,那么它编译得非常好,因为我们正在激活String和NSString之间的桥接:
// 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?
关键字,在答案中使用Scott所说的话。