我想把一個快速的3 do-catch
放在一個函數中,而不是隨時隨地寫在我需要的地方;在這個函數裏我希望返回一個帶有布爾值的tuple
,以及一個可選的錯誤。Swift如何從條件綁定必須具有可選類型的do catch中返回元組?
我試圖從函數返回一個元組和處理的結果我XCTest
不過,我得到一個錯誤說:
初始值設定爲有條件的結合必須有可選的類型,而不是' (Bool,Error?)'(aka'(Bool,Optional)')
我的功能如下;
public static func isValidPurchase(train: Train, player: Player) -> (Bool, Error?) {
do {
let result = try train.canBePurchased(by: player)
return (result, nil)
} catch let error {
return (false, error)
}
}
我canBePurchased
代碼是有點長,但它是這樣的:
func canBePurchased(by player: Player) throws -> Bool {
if (!self.isUnlocked) {
throw ErrorCode.trainIsNotUnlocked(train: self)
}
// other if-statements and throws go here
}
在我XCTest我把它看作:
if let result = TrainAPI.isValidPurchase(train: firstTrain, player: firstPlayer) as! (Bool, Error?) {
}
我試着施法力:
if let result: (Bool, Error?) ...
但這隻會將編譯器錯誤降級爲警告。
編譯器顯示如上所述的錯誤。
我在做什麼錯在Initializer for conditional binding must have Optional type
方面,我該如何避免它?
謝謝
瞭解。我會做出改變並感謝您的幫助 – zardon