这个Swift语法有什么问题?

时间:2017-09-06 02:51:49

标签: swift

我无法弄清楚以下内容有什么问题:

fileprivate func showInlineErrorMessage(_ message: String, forField textField: UITextField) {

        // Show error message
        errorLabel.text   = message
        errorLabel.isHidden = false

        // Highlight field on which the error is
        [usernameTextField, passwordTextField, birthYearTextField, genderTextField].forEach {
            updateHighlightOnTextField($0!, highlight: $0 === textField )
        }
    }

具体部分为$0 === textField

编译器显示以下错误:

"?" must be followed by a call, member lookup, or a subscript

这是旧代码,所以最近似乎有些变化。

被调用的函数是

fileprivate func updateHighlightOnTextField(_ textField: UITextField, highlight: Bool) {
        let highlightView = textField.superview!
        highlightView.layer.borderWidth = highlight ? 1.0 : 0.0
        highlightView.layer.borderColor = highlight ? DefaultTheme.lineColorError.cgColor : nil
    }

enter image description here

2 个答案:

答案 0 :(得分:1)

有时swift无法理解内联语句的类型。 你试过了吗?

创建外部布尔值:

    [usernameTextField, passwordTextField, birthYearTextField, genderTextField].forEach {
        let isHighlighted: Bool = ($0 === textField)
        updateHighlightOnTextField($0!, highlight: isHighlighted)
    }

答案 1 :(得分:1)

不必要地使用力展开似乎导致了这个问题。

如果你改变:

updateHighlightOnTextField($0!, highlight: $0 === textField)

为:

updateHighlightOnTextField($0, highlight: $0 === textField)
然后问题就消失了。

这假设您的文本字段属性被声明为非可选或隐式解包的选项。

如果您的文本字段被声明为选项,那么您可以放心地展开$0以避免使用!