自从我在iOS中进行编码以来,已经很长时间了,我正在将旧应用程序升级到swift 3.我真的很难解决使用可选变量的一个问题。
我有一个可选的文本字段。我希望将它解包为非可选的 Int ,以便我可以在其他函数中使用它进行计算。
@IBOutlet weak var txtRuns: UITextField!
func sendScore()
{
let runs = txtRuns.text!
let overs = txtOvers.text!
let balls = txtBalls.text!
let wkts = txtWkts.text!
let target = txtTarget.text!
let totalOvers = txtTotalOvers.text!
let strData = "S|R\(runs)" + getOptionalScoreData(
runs: Int(runs),
wkts: Int(wkts),
overs: Int(overs),
balls: Int(balls),
target: Int(target),
totalOvers: Int(totalOvers)
)
}
func getOptionalScoreData(runs: Int, wkts: Int, overs: Int, balls: Int, target: Int, totalOvers: Int) -> String
{
if ( runs == 0 ) {
return getCurrentRunRate(runs: runs)
}
return "";
}
正如您所看到的,我有很多函数要调用,我希望这个文本字段变成非可选的INT。
现在我尝试了几个我在这里阅读的选项,但错误信息只会改变。问题没有解决。
目前的错误是
The value of optional type 'Int?' not unwrapped; did you mean to use '!' or '?'?
请帮忙。 感谢
.................
请注意,我认为嵌套检查不是一个好主意,因为所有这些变量都是相互独立的。一个可以是零,但其他可以仍然通过和使用。
如果我像这样嵌套检查,则意味着如果运行为零,则不会传递任何其他值。
if let runs = txtRuns.text, let runsInInt = Int(runs) {
if let overs = txtOvers.text, let oversInInt = Int(overs) {
if let wkts = txtWkts.text, let wktsInInt = Int(wkts) {
strData = "S|R\(runs)\(overs)\(wkts)" + getOptionalScoreData( runs: runsInInt, overs: oversInInt, wkts: wktsInInt)
}
答案 0 :(得分:4)
如果您经常从UITextField
获得Int
的价值,则可以按如下方式添加扩展程序:
extension UITextField {
var intValue: Int {
get {
if let text = self.text {
return Int(text) ?? 0
}
return 0
}
set {
self.text = String(newValue)
}
}
}
您也可以在viewcontroller中添加上面的私有扩展名。现在您可以将代码重写为:
func sendScore() {
let strData = "S|R\(txtRuns.intValue)\(overs.intValue)\(wkts.intValue)" + getOptionalScoreData(
runs: txtRuns.intValue,
wkts: wkts.intValue,
overs: overs.intValue,
balls: balls.intValue,
target: target.intValue,
totalOvers: totalOvers.intValue)
)
}
答案 1 :(得分:0)
0
调用Int的构造函数:
Int(runs)
因为public init?(_ text: String, radix: Int = default)
到String
可能由于String而失败可能不是有效的整数。
你会如何处理它?</ p>
您可以参考Sallu的评论。
Int
,以确保!
中的String
绝对是有效整数或应用程序崩溃。 UITextField
runs: Int(runs)!
中的??
不是有效整数,则String
提供默认值。 UITextField
如果默认值为0