使用闭包设置UITextView属性时出现“表达式类型模糊”错误
解决UITextView闭包初始化报错问题
嘿,这个问题我之前也踩过坑!你写的代码是想通过尾随闭包直接配置UITextView的属性,但原生UITextView并没有提供接受这种配置闭包的初始化器,这就是为什么会抛出“Type of expression is ambiguous without more context”的错误。
给你两种可行的解决方案:
方案1:直接初始化后配置属性
这是最直观的写法,先完成UITextView的初始化,再逐个设置属性:
let textView = UITextView() textView.text = "SAMPLE TEXT" textView.isEditable = false textView.contentInset = UIEdgeInsets(top: 14, left: 0, bottom: 0, right: 0)
方案2:扩展UITextView添加自定义初始化器
如果你特别想用闭包链式配置的写法,可以给UITextView写一个扩展,添加接受配置闭包的便利初始化器,以后就能复用这种写法了:
extension UITextView { /// 接受配置闭包的便利初始化器 convenience init(configure: (UITextView) -> Void) { self.init() // 调用默认的无参初始化器 configure(self) // 传入当前实例给闭包进行配置 } } // 现在就可以用你最初想的方式初始化了: let textView = UITextView { $0.text = "SAMPLE TEXT" $0.isEditable = false $0.contentInset = UIEdgeInsets(top: 14, left: 0, bottom: 0, right: 0) }
原理很简单:原生UITextView的初始化器只有init(frame: CGRect)和init?(coder: NSCoder)两种,没有直接支持闭包配置的版本。我们通过扩展添加的便利初始化器,先调用默认的无参初始化(等价于init(frame: .zero)),再把实例传给闭包让你自定义配置,完美匹配你想要的写法。
内容的提问来源于stack exchange,提问作者user4170419
相关产品推荐
相关产品推荐

