尝试使用:
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'
// 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?
关键字。