如何使用Optionals在Swift中停止编译器错误

我想要一种方法来检测string中的input错误,并通知用户。 以下面的例子:

let fraction = "15/8" let fractionArray = fraction.components(separatedBy: "/") let numerator = Double(fractionArray[0]) let denominator = Double(fractionArray[1]) var linearFactor = numerator! / denominator! print(numerator!, "/", denominator!, " = ", linearFactor) 

但是,如果我强制展开,string中的无效字符将强制编译错误,我宁愿通知用户,inputstring包含无效分数。 可选的链接似乎是要走的路,但我不能正确的语法。

在我的代码中( 如下所示 ),我将可选的链接操作符放在数组旁边,包括fraction?.components(separatedBy: “/“)但是Fix – 它告诉我要删除它。

如果有更好的方法比可选的链接来解决这个问题有人请解释我可能错过了什么,当我在这里search答案,所以我可以使代码工作? 谢谢

  let fraction = “15/8” if let fractionArray = fraction?.components(separatedBy: “/“) { let numerator = Double(fractionArray[0]) let denominator = Double(fractionArray[1]) var linearFactor = numerator / denominator print(numerator, "/", denominator, " = ", linearFactor) } else { print(“Invalid. Re-enter fraction”) } 

  1. 分数是string不是string? 所以你不必使用分数?
  2. 组件返回[]不是[]? ,所以你可以使用fractionArray而不打开任何东西
  3. 你唯一要展开的是分子分母 ,他们的types是Double?
  4. 谢谢@OOPer,应该检查分母!= 0
  5. 感谢@Martin R,应该检查fractionArray.count == 2

所以我会重构下面的代码:

 let fraction = "15/8" let fractionArray = fraction.components(separatedBy: "/") guard let numerator = Double(fractionArray[0]), let denominator = Double(fractionArray[1]), denominator != 0, fractionArray.count == 2 else { print("Invalid. Re-enter fraction, or denominator == 0, or fractionArray.count != 2") return } let linearFactor = numerator / denominator print(numerator, "/", denominator, " = ", linearFactor)