我正在swift中创建一个基本的应用程序(用于学习目的),以便将猫年转化为人类年。因此,有一个名为: edadGatoTextField 的文本框,用户可以输入cat的年份,然后按 calcularEdadButtonPressed 按钮查看 mensajeLabel 中的转换年份
我试图添加一个 if 语句,以便在 mensajeLabel 中打印一条消息,告诉用户必须输入一个数字才能转换它。
- >所以,下面是代码,它应该有效,但为什么我收到错误:如果年龄?
我正常运行我的应用,但在 calcularEdadButtonPressed 时崩溃,而 edadGatoTextField
中没有数字与选项或未打包的选项有关。
class ViewController: UIViewController {
@IBOutlet weak var edadGatoTextField: UITextField!
@IBOutlet weak var mensajeLabel: UILabel!
@IBOutlet weak var imagenGatoImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func calcularEdadButtonPressed(sender: AnyObject) {
var age = edadGatoTextField.text.toInt()
// *** Bellow is the error! I'm trying to figure out if user
// has not entered any number in order to display the message.
if age {
age = age * 7
mensajeLabel.text = "Your cat's age is \(age) years!"
mensajeLabel.textColor = UIColor.blueColor()
edadGatoTextField.resignFirstResponder()
imagenGatoImageView.image = UIImage(named: "cat2.jpg")
} else {
mensajeLabel.text = "Please enter a number!"
mensajeLabel.textColor = UIColor.redColor()
}
}
}
答案 0 :(得分:2)
age
的类型为Int?
(可选Int
),因此是整数或nil
。您不能将nil
比较视为Swift if
语句中的布尔比较。您必须明确核对nil
:
if age != nil {
let humanAge = age! * 7
//...
} else {
//...
}
但你应该使用可选的绑定,除非你有理由不这样做:
if let age = edadGatoTextField.text.toInt() {
let humanAge = age * 7
//...
} else {
//...
}
答案 1 :(得分:2)
这里有两个问题。
首先,UITextField
' text
属性是可选的。除非您在每次创建时手动将其设置为空字符串,否则它将为nil
,直到用户在其中键入内容为止。
其次,String
' toInt()
方法返回一个可选的Int?
。如果您调用String
的{{1}}无法解析为整数,toInt()
会返回toInt()
。
然后我们遇到斯图尔特的答案碰到的障碍。使用nil
模式,我们必须在if let
体内声明另一个变量乘以7,因为if
声明了一个无法修改的常量。
然而,我们可以在一行中解决所有这三个问题。我们只需要知道if let
不是唯一可用的模式。我们可以使用if let
:
if var
答案 2 :(得分:1)
Swift 3
如果您的文字字段为空,您可以通过此代码进行检查吗?
将目标添加到文字字段
self.yourTextField.addTarget(self, action: #selector(textFieldDidChange(textField:)), for: .editingChanged)
现在您可以将已连接的功能与目标字段绑定。
func textFieldDidChange(textField: UITextField){
if textField.text == "" {
//You can perfrom your activity here when textfield got blank or empty
}
else
{
//You can perfrom your activity here when textfield got not blank or not empty
}
}
答案 3 :(得分:0)
if let age = edadGatoTextField.text.toInt() {
// Calculate cat years
} else {
// Show error
}
如果查看文档,UITextField.text是一个隐式解包的可选项,因此如果未初始化则可能为nil。由于'if let'和可选的链接结构,当且仅当文本不是nil并且可转换为int时才会得到'age',否则它将为nil。