Swift 2.0如何解开支票?

时间:2016-05-16 16:31:36

标签: swift

我找到了一个话题,但似乎不一样...... Value of optional type 'String?' not unwrapped; did you mean to use '!' or '?' Using Parse In Swift 2.0

我有错误

  

可选类型的值'字符串?'没有打开;你的意思是用吗?   '!'或者'?'?

func textFieldDidEndEditing(textField: UITextField) 
    {
            if textField.text.isEmpty || count(textField.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()))
    == 0
            {
                textField.attributedPlaceholder = NSAttributedString(string: Messages.conversationNamePlaceholder.rawValue,
                    attributes:[NSForegroundColorAttributeName: UIColor.blackColor().colorWithAlphaComponent(0.54)])
            }
    }

2 个答案:

答案 0 :(得分:2)

这里的问题是你试图将方法“isEmpty”应用于可选包装的字符串“textfield.text”。

您应该使用以下内容替换您的if语句:

if textField.text?.isEmpty || count(textField.text?.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()))

文本在textfield中是可选的,因为textfield的文本可以是nil!展开可选对象时要注意这些情况!

如果你想提供一个基本案例,你可以这样:

let text = textfield.text? ?? ""

然后你可以用这个变量替换所有出现的textfield.text,并确保它永远不会是nil!

答案 1 :(得分:1)

!标志应该避免,因此我通常会这样做:

if textField.text?.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).characters.count > 0 {
    ...
}

使用!展开可选值,但如果值为nil,则致命错误会导致应用程序崩溃。