如何在 swift 中使用 AnyObject 将结构转换为对象
Posted
技术标签:
【中文标题】如何在 swift 中使用 AnyObject 将结构转换为对象【英文标题】:How a struct is getting converted as an object using AnyObject in swift 【发布时间】:2016-05-05 09:39:49 【问题描述】:在以下示例中,testString 被声明为 String 的对象,该对象是一个结构。但是我们可以使用 AnyObject 将其指定为对象。结构到对象的转换是如何快速发生的?
let testString:String = "Hello World"
let testObject:AnyObject = testString
print("My test object\(testObject)") // this works!
【问题讨论】:
相关:***.com/questions/24006549/… 和 ***.com/questions/32638879/…。请注意,只有在导入 Foundation 时桥接才有效。 【参考方案1】:Swift 和 Objective C 不是独立的。在 Swift 中你可以使用 NSString。 在您的情况下,在编译期间会在 testString 之间建立一个内部桥梁并转换为 NSString 类型,这允许您将 testString 存储到 testObject 中
【讨论】:
【参考方案2】:之所以有效,是因为编译器对String
和NSString
有特殊的了解。 Swift 中的 String 可以桥接到 ObjC 中的 NSString。你可以检查它的动态类型:
let testString:String = "Hello World"
let testObject:AnyObject = testString
print("My test object \(testObject.dynamicType)") // object_NSContiguousString
object_NSContiguousString
是NSString
集群中的私有类。
用你自己的自定义结构这样做是行不通的:
struct Person
var firstName = ""
var lastName = ""
let testPerson = Person(firstName: "John", lastName: "Smith")
let testObject: AnyObject = testPerson // error
【讨论】:
以上是关于如何在 swift 中使用 AnyObject 将结构转换为对象的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中检索 NSURLRequest 的 HTTPBody 参数到 Dictionary: [NSObject: AnyObject]
更新到 Swift 3.0:上下文类型“AnyObject”不能与字典文字一起使用
如何在 Swift 2.3 中将 UInt8 转换为 Anyobject
将“var touch:AnyObject?= touches.anyObject()”转换为 Swift 1.2 [重复]