请考虑以下代码:
let nsdate: NSDate? = NSDate()
if let date = nsdate as? Date { // a warning occurs here
print(date)
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨如下: Conditional downcast from 'NSDate?' to 'Date' is a bridging conversion; did you mean to use 'as'?
从铸造NSData到Data有同样的问题.怎么解决呢?
Jur*_*sic 31
尝试强制转换为可选日期:
if let date = nsdate as Date?
Run Code Online (Sandbox Code Playgroud)
您正在尝试将可选 NSDate 的可选强制转换为NON可选日期.只要NSDate从obj-c桥接到Date,所以这个演员总是成功,所以这里不需要任选的演员阵容,只需基本演员as就足够了.然后你需要转换可选值,因此结果值也必须是可选的,因此Date?这里是合适的.
Swift 3.1区分
一个可选的下击as? Foo
例如,它向更具体的类型转换更具特异性
let dict : [String:Any] = ["Foo" : 12]
let number = dict["Foo"] as? Int
Run Code Online (Sandbox Code Playgroud)一桥可选类型的投as Foo?
它将(核心)基础类型桥接到免费的 Swift类型,反之亦然.
它是通常的非可选语法的可选等效项
let string : NSString = "Foo"
let swiftString = string as String
Run Code Online (Sandbox Code Playgroud)对于开发人员而言,这种差异是微妙的,但对编译器非常有用.
NS...如果有一个原生的Swift对应物,基本上不要在Swift 3中使用Foundation类.
| 归档时间: |
|
| 查看次数: |
3574 次 |
| 最近记录: |