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

Swift 使用IBInspectable在UITextField中创建最大字符长度,swift,uitextfield,maxlength,ibinspectable,Swift,Uitextfield,Maxlength,Ibinspectable,我想用IBInspectable为我的文本字段创建一个最大长度,我看到一个问题的答案,但我得到一个错误,说表达式类型“()”在没有更多上下文的情况下是不明确的 我的密码是 导入UIKit 私有变量\uuuMaxLength=[UITextField:Int]() 扩展UITextField{ @IBInspectable变量maxLength:Int{ 得到{ guard let l=uu MaxLength[self]else{ 返回150/(全局默认限制或仅限Int.max) } 返回l }

我想用
IBInspectable
为我的文本字段创建一个最大长度,我看到一个问题的答案,但我得到一个错误,说
表达式类型“()”在没有更多上下文的情况下是不明确的

我的密码是

导入UIKit
私有变量\uuuMaxLength=[UITextField:Int]()
扩展UITextField{
@IBInspectable变量maxLength:Int{
得到{
guard let l=uu MaxLength[self]else{
返回150/(全局默认限制或仅限Int.max)
}
返回l
}
设置{
__MaxLength[self]=新值
addTarget(自我,操作:#选择器(修复),用于:。编辑已更改)
}
}
@objc func修复(文本字段:UITextField){
设t=textField.text
textField.text=t?.prefix(最大长度)
}
}
我在
textField.text=t?.prefix(maxLength)
上发现一个错误,错误消息说
表达式类型“()”在没有更多上下文的情况下是不明确的


如何解决此问题?

在Swift 5中,String的
prefix
方法返回类型为
String.SubSequence的值

func prefix(_ maxLength: Int) -> Substring
您需要将其转换为
字符串
类型

一种方法可能是:

let s = textField.text!.prefix(maxLength) // though UITextField.text is defined as an optional String, can be safely force-unwrapped as the default value is an empty string even when set to nil
textField.text = String(s)
或者,如果您更喜欢单线解决方案:

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

能否删除func fix前面的
@objc
注释?我认为是它导致了这个错误。@Sung JongWillKim
@objc
是必需的,选择器是链接的。UITextField
text
属性默认值是空字符串。保持
t
可选是无点的SuitextField。文本定义为可选字符串。我只是保持与OP的原始代码内联。打开变量文本:字符串?//默认值为nilUITextField
text
property值永远不会为零谢谢你让我诚实。“跳转到定义”操作显示UITextField代码中似乎过时的注释。我将编辑答案