我无法弄清楚以下内容有什么问题:
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
}
答案 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
以避免使用!
。