使用IBInspectable在UITextField中创建最大字符长度

7 浏览
0 Comments

使用IBInspectable在UITextField中创建最大字符长度

我想通过IBInspectable为我的文本框创建一个最大长度,我在一个问题here上看到了一个答案,但是我得到了一个错误,错误信息是Expression type '()' is ambiguous without more context

我的代码是

import UIKit

private var __maxLengths = [UITextField: Int]()

extension UITextField {

@IBInspectable var maxLength: Int {

get {

guard let l = __maxLengths[self] else {

return 150 // (global default-limit. or just, Int.max)

}

return l

}

set {

__maxLengths[self] = newValue

addTarget(self, action: #selector(fix), for: .editingChanged)

}

}

@objc func fix(textField: UITextField) {

let t = textField.text

textField.text = t?.prefix(maxLength)

}

}

我得到一个错误,指向textField.text = t?.prefix(maxLength),错误信息是Expression type '()' is ambiguous without more context

我该如何解决它?

0
0 Comments

问题出现的原因是,在Swift 5中,String的prefix方法返回的是一个String.SubSequence类型的值,而不是String类型。所以需要将其转换为String类型。

解决方法是将String.SubSequence类型的值转换为String类型。可以通过以下方式实现:

let s = textField.text!.prefix(maxLength)

textField.text = String(s)

或者使用单行解决方案:

textField.text = String(textField.text!.prefix(maxLength))

另外,需要注意的是,UITextField的text属性的默认值是一个空字符串,因此将其定义为可选类型是没有意义的。UITextField的text属性值永远不会是nil。

感谢你提醒我。"Jump to definition"操作显示UITextField代码中的注释似乎已经过时了。我会编辑答案。

0