在Swift中,如何检查对象(AnyObject)是否为String?

时间:2014-10-23 05:00:12

标签: string swift

尝试使用:

obj.isKindOfClass(String)

但是它说Type'String'不符合协议'AnyObject'

那你怎么知道一个对象是不是一个字符串呢?

这个问题的上下文是UIActivity方法,prepareWithActivityItems,我需要保存活动项,但如果有多个活动项,你怎么知道哪个是哪个?

2 个答案:

答案 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

当然,您应该使用isas?关键字,在答案中使用Scott所说的话。