關於 Optional 的一些實踐
阿新 • • 發佈:2020-07-31
為 Optional 新增 extension
extension Optional where Wrapped == String {
var safeValue: String {
return self ?? ""
}
}
var name: String? = "Swift"
print(name ?? "")
name = nil
print(name!) // 強制解包造成 crash
print(name.safeValue) // 無需解包,不存在上述情況
複製程式碼
優點:無需解包,從而減少程式碼因強制解包而出現的問題。
為 Optional 新增單元測試
XCTUnwrap(::file:line:) : 如果表示式為 nil,則測試失敗;若不為 nil,測試成功,返回解包的值。
func testNameValue() throws {
let name: String? = "Swift"
let unwrappedTitle = try XCTUnwrap(name, "Title should be set")
XCTAssertEqual(unwrappedTitle, "Swift")
}
複製程式碼
Optional Protocol
通過 extension 來實現 optional Protocol。
protocol Eat {
func eatFish()
func eatApple() //Optional
}
extension Eat {
func eatApple() { }
}
struct Cat: Eat {
func eatFish() {
print("Dog eat fish")
}
}
複製程式碼
避免嵌入式 Optional
optional 可以重複使用,比如下面的程式碼:https://www.bugzj.com/536.html
var name: String?? = "Swift" // 使用這種方式估計會被人打死