在"The Swift Programming Language."一书中,Apple提到在访问可选变量时使用if和let一起使用.
本书给出了以下代码:
var optionalString: String? = "Hello"
optionalString == nil
var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
greeting = "Hello, \(name)"
}
Run Code Online (Sandbox Code Playgroud)
使用的优势是什么if let name = optionalName,而不是if optionalName != nil(并且总是称之为optionalName)?有什么区别,还是仅仅是惯例?
myt*_*thz 12
因为它还解包了可选值,所以这段代码:
if let name = optionalName {
greeting = "Hello, \(name)"
}
Run Code Online (Sandbox Code Playgroud)
相当于:
if optionalName != nil {
let name:String = optionalName!
greeting = "Hello, \(name)"
}
Run Code Online (Sandbox Code Playgroud)
这种语言糖在Swift中称为Optional Binding.
在夫特T和T?不同类型的,但可选的基础值T?可以很容易地通过使用能够实现类型!后缀操作符,例如:
let name:String = optionalName!
Run Code Online (Sandbox Code Playgroud)
现在可以在String预期的地方使用,例如:
func greet(name:String) -> String {
return "Hello, \(name)"
}
greet(name)
Run Code Online (Sandbox Code Playgroud)
虽然这样做是安全的,但Swift确实允许你隐式转换为可选类型:
let name = "World"
let optionalName: String? = name
func greet(optionalName:String?) -> String? {
if optionalName != nil {
return "Hello, \(optionalName)"
}
return nil
}
//Can call with either String or String?
greet(optionalName)
greet(name)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
327 次 |
| 最近记录: |