2014-09-01 17 views
0

我这里有这个代码运行的alertview并显示一个文本字段,要求主题名称斯威夫特错误,而试图从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() 

     })) 

再林在声明变量项目和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

这很奇怪...

var textf= alertController.textFields[0] as UITextField 
self.items += [self.textf] 

var textfself.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() 
    })) 
} 
+0

感谢它添加文本F到项阵列,但唯一的事情是,我仍然收到这个错误,当我打印出来textf我认为很奇怪,因为items数组获取文本,你会知道为什么会发生这种情况 – 2014-09-04 19:52:19

+0

这不是一个错误。这是一个'UITextField'被转换为一个字符串,这正是您打印'UITextField'时所期望的。如果你想要这个字符串,那么:'println(textf!.text)' – 2014-09-04 20:34:42

+0

谢谢你测试完成并完美工作 – 2014-09-05 20:21:20