1. 程式人生 > 實用技巧 >關於 Optional 的一些實踐

關於 Optional 的一些實踐

為 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" // 使用這種方式估計會被人打死