我这里有这个代码,它运行一个alertview并显示一个文本字段,询问主题名称
alertController.addAction(UIAlertAction(title: "Ok", style: .Default, handler:{ (alertAction:UIAlertAction!) in
var textf= alertController.textFields[0] as UITextField
self.items += [self.textf]
println(self.items)
println(textf)
self.view .setNeedsDisplay()
}))
然后我使用此代码在代码顶部从该函数声明变量items和textf
var items = ["English"]
let textf = ""
但问题是,当我运行我的应用程序并单击显示alertview的按钮并输入我的主题并单击确定时,我在尝试打印字符串时出现此错误。它只是打印出这个错误,它不会关闭我的应用程序
<_UIAlertControllerTextField: 0x7f9d22d1c430; frame = (4 4; 229 16); text = 'irish'; clipsToBounds = YES; opaque = NO; gestureRecognizers = <NSArray: 0x7f9d22cc55f0>; layer = <CALayer: 0x7f9d22d1c6e0>>
它在错误中输入了我输入的文本,但它没有将它添加到变量中,因为当我打印出数组items
时,它打印出来
[English, ]
而不是
[English, irish]
答案 0 :(得分:0)
这很奇怪......
var textf= alertController.textFields[0] as UITextField
self.items += [self.textf]
var textf
和self.textf
是两个不同的变量。看起来self.textf
是您在函数外部设置的空字符串。因此,空字符串会添加到items
数组中。
您还有另一个问题。您似乎想要一个字符串,但您的var textf
值是UITextField
。如果你想要字符串,你需要抓住text
属性。
这种混淆是我喜欢显式打字的原因。如果您期望String
并且UITextField
,则编译器会在您明确键入变量时捕获它。
这意味着你需要更像这样的东西:
var items: [String] = ["English"]
var textf: UITextField? = nil // this variable optionally holds a text field
// later, inside some function...
func somefunc() {
alertController.addAction(UIAlertAction(title: "Ok", style: .Default, handler:{ (alertAction:UIAlertAction!) in
self.textf = alertController.textFields[0] as UITextField
// append() is preferable to += [], no need for a temporary array
self.items.append(self.textf!.text)
println(self.items)
println(textf)
self.view.setNeedsDisplay()
}))
}