扩展可能不包含 UItextfield 中的存储属性

Posted

技术标签:

【中文标题】扩展可能不包含 UItextfield 中的存储属性【英文标题】:Extensions may not contain stored properties in UItextfield 【发布时间】:2017-11-02 07:00:01 【问题描述】:
extension UITextField
@IBInspectable var placeholdercolor: UIColor 
    
    willSet 
         attributedPlaceholder = NSAttributedString(string: placeholder != nil ?  placeholder! : "", attributes:[NSAttributedStringKey.foregroundColor: placeholdercolor])
    

我正在为占位符颜色创建 UITextField 扩展。我不想创建自定义类,我也尝试

@IBInspectable var placeholdercolor: UIColor 
    
get
    
       return self.placeholdercolor 
    
    set
    
        attributedPlaceholder = NSAttributedString(string: placeholder != nil ?  placeholder! : "", attributes:[NSAttributedStringKey.foregroundColor: placeholdercolor])
    

但它在方法上给出错误(线程 1:EXC_BAD_ACCESS)

get
    
       return self.placeholdercolor 
    

请帮忙

【问题讨论】:

【参考方案1】:
@IBInspectable var placeholdercolor: UIColor 
    
get
     // you can't return this here because this will call the getter again and again -> Stack Overflow
       return self.placeholdercolor 
    
    set
    
        attributedPlaceholder = NSAttributedString(string: placeholder != nil ?  placeholder! : "", attributes:[NSAttributedStringKey.foregroundColor: placeholdercolor])
    

您应该在 getter 中返回属性字符串中的前景色属性:

get
    
       return attributedPlaceholder?.attribute(NSForegroundColorAttributeName, at: 0, effectiveRange: nil) as? UIColor
    

我建议您将此属性设为可选,以防万一该属性未设置。

编辑:

您的二传手也不正确。你应该使用newValue:

attributedPlaceholder = NSAttributedString(string: placeholder != nil ?  placeholder! : "", attributes:[NSAttributedStringKey.foregroundColor: newValue])

【讨论】:

以上是关于扩展可能不包含 UItextfield 中的存储属性的主要内容,如果未能解决你的问题,请参考以下文章

收到错误:“扩展可能不包含存储的属性”

目标 C 和 Swift 互操作性导致错误“扩展可能不包含存储的属性”

子类/扩展 UIView 以便所有其他视图(UIImageView、UITextField ...)在创建时继承

存储指针并辞去第一响应者后无法重新聚焦 UITextField

在键盘应用程序扩展中使用 UITextField

验证 UITextField 不包含字母