我正在尝试学习Swift,结果发现它与其他语言的差异比我预期的要大得多...
我只想将用户输入的值存储为变量中的整数。
我的尝试导致以下错误:“致命错误:在展开可选值时意外发现nil”
我已经尝试了多种方法,但似乎无法提出解决方案,我知道必须有一种简单的方法来做到这一点。
var intNumber: Int = 0
@IBOutlet weak var txt_Number: UITextField!
for view in self.view.subviews as [UIView]{
if let txt = view as? UITextField
{
if let txtData = txt.text where txtData.isEmpty
{
// Error Message
}
else
{
intNumber = Int(txt_Number.text)
}
}
}
我知道上面的代码是不正确的,但是我认为这是我最近提出的最正确的代码。就展开而言,我似乎丢失了一些东西。我了解解包的原理,但是我尝试过的所有内容都不会编译,或者如果编译成功,则在代码启动时(上面的错误将在按下按钮时启动)而失败,并显示上述错误。
在此先感谢您的帮助!
一些想法:
确保您的插座已连接至txt_Number
。nil
如果(a)它是您与IB相连的插座,那么所有这些代码检查都可以确保不必要。(b)在视图完全加载(viewDidLoad
即被调用)之前,您没有执行上述代码。
如果插座未连接,您会在左空白处看到一个空点:
如果连接正确,您会在左侧空白处看到一个填充的点:
如果一切都正确连接,则可以执行以下操作:
guard let txtData = txt_Number.text, let value = Int(txtData) else {
// report error and then `return`
return
}
intNumber = value
如果想花哨的话,可能要确保用户仅输入数字
在中viewDidLoad
,指定键盘仅用于十进制数字。
txt_Number.keyboardType = .NumberPad
或者,您也可以在IB中指定。
为文本字段指定一个委托,只允许他们输入数字值。(基于先前的观点,这似乎是多余的,但并非如此,因为您还必须预期它们会以字符串形式粘贴到文本字段中。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句