Swift AnyObject的下标,它来自哪里?
发布时间:2020-12-14 05:37:28 所属栏目:百科 来源:网络整理
导读:在Swift中,AnyObject如何支持下标,即使是不可下标的类型呢?例: let numbers: AnyObject = [11,22,33]numbers[0] // returns 11let prices: AnyObject = ["Bread": 3.49,"Pencil": 0.5]prices["Bread"] // returns 3.49let number: AnyObject = 5number[0]
在Swift中,AnyObject如何支持下标,即使是不可下标的类型呢?例:
let numbers: AnyObject = [11,22,33] numbers[0] // returns 11 let prices: AnyObject = ["Bread": 3.49,"Pencil": 0.5] prices["Bread"] // returns 3.49 let number: AnyObject = 5 number[0] // return nil let number: AnyObject = Int(5) number[0] // return nil 然而,如果我的号码被声明为Int,那么这是一个语法错误: let number: Int = 5 number[0] // won't compile 有趣的是,Any没有下标支持.
这只有在您导入Foundation时才起作用,因为在这种情况下,Swift正在做一些桥接到Objective-C类型 – 在这种情况下是一个NSArray类对象.
import Foundation let numbers: AnyObject = [11,33] numbers.dynamicType //_SwiftDeferredNSArray.Type 如果您不导入Foundation,那么您甚至不允许进行赋值(因为Swift数组是一个结构体,而不是一个对象). let numbers: AnyObject = [11,33] // error: contextual type 'AnyObject' cannot be used with array literal 尽管如此,你可以投给任何人: let numbers: Any = [11,33] numbers.dynamicType // Array<Int>.Type 为什么导入基金会的诀窍呢?这在AnyObject类型描述中有记录: /// When used as a concrete type,all known `@objc` methods and /// properties are available,as implicitly-unwrapped-optional methods /// and properties respectively,on each instance of `AnyObject`. For /// example: /// /// class C { /// @objc func getCValue() -> Int { return 42 } /// } /// /// // If x has a method @objc getValue()->Int,call it and /// // return the result. Otherwise,return nil. 这意味着您甚至可以调用阵列上不一定存在于NSArray上的方法,但存在于Objective-C世界中,例如: numbers.lowercaseString // nil 而Swift会优雅地返回一个零值,而不是抛出一个讨厌的对象不能识别选择器异常,就像在Objective-C中会发生的那样.如果这是好还是坏,还是要辩论:) 更新 import Foundation @objc class TestClass: NSObject { @objc var someProperty: Int = 20 @objc func someMethod() {} } let numbers: AnyObject = [11,33] numbers.lowercaseString // nil numbers.someMethod // nil numbers.someMethod() // unrecognized selector numbers.stringByAppendingString("abc") // unrecognized selector (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |