我阅读了Swift的内联文档,我有点困惑.
1)Any是所有类型隐式符合的协议.
2)AnyObject是所有类隐式符合的协议.
3) ,,Int 是结构FloatDouble
这是一个示例代码:
import UIKit
func passAnyObject(param: AnyObject) {
print(param)
}
class MyClass {}
struct MyStruct {}
let a: Int = 1
let b = 2.0
let c = NSObject()
let d = MyClass()
let e = MyStruct()
passAnyObject(a)
passAnyObject(b)
passAnyObject(c)
passAnyObject(d)
//passAnyObject(e) // Argument type 'MyStruct' does not conform to expected type 'AnyObject'
if a is AnyObject { // b, d, e is also AnyObject
print("\(a.dynamicType) is AnyObject")
}
Run Code Online (Sandbox Code Playgroud)
我不明白是为什么Int,Double,Float是AnyObjectS' 为什么编译器什么都没说?这些类型被声明为结构.Struct MyStruct不能传递给顶部的方法,因为它不符合AnyObject.
你能帮助我了解为什么Int,Double并且Float是AnyObject为什么编译器认为他们是谁?
vac*_*ama 33
因为你已经基金会进口Int,Double以及Float转换为:NSNumber当传递给服用的功能AnyObject.类型String转换为NSString.这样做是为了在调用基于Cocoa和Cocoa Touch的界面时使生活更轻松.如果删除import UIKit(或import CocoaOS X),您将看到:
error: argument type 'Int' does not conform to expected type 'AnyObject'
Run Code Online (Sandbox Code Playgroud)
你打电话的时候
passAnyObject(a)
Run Code Online (Sandbox Code Playgroud)
传递一个Int,Double,String,或Bool到类型的参数AnyObject现在在一个错误的结果,例如类型"INT"的参数不符合预期类型"AnyObject".
使用Swift 3,已删除隐式类型转换.现在有必要投Int,Double,String并Bool 与as AnyObject以它传递给类型的参数AnyObject:
let a = 1
passAnyObject(a as AnyObject)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5150 次 |
| 最近记录: |