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?
关键字。

这很简单。也在文档中。哎呀。谢谢你的详细回复