私はそれを必要とするどこでも絶えず書いているのではなく、すぐに3 do-catch
を関数の中に入れたいと思っています。この関数の中では、ブール値とオプションのエラーでtuple
を返したいと思います。Swift条件付きバインディングにオプションの型が必要なキャッチからタプルを返す方法は?
で結果を処理しようとしています
:
初期化子の条件付き結合のために 'がない、オプションのタイプを持っている必要があります(Bool、Error?) '(別名(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
コードは少し長いですが、それはこのように書きます:私が試した
if let result = TrainAPI.isValidPurchase(train: firstTrain, player: firstPlayer) as! (Bool, Error?) {
}
:
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: (Bool, Error?) ...
しかし、これはコンパイラエラーを警告に降格するだけです。
コンパイラは上記のエラーを表示します。
私はInitializer for conditional binding must have Optional type
の点で何が間違っていますか?どのように避けますか?
ありがとう
。私は変更を行い、助けてくれてありがとう – zardon