我只需要为UITextView
类添加一个额外的变量。
我的第一次尝试:
extension UITextView
{
var id : String
}
但它会给出错误消息Extension may not contain stored properties
!
第二次尝试:
extension UITextView
{
var id : String
{
get { return self.id }
set(newValue) { self.id = newValue }
}
}
但当我尝试在Thread 1 : EXC_BAD_ACCESS
中分配值时,它会破坏我的应用并发出错误消息var id
。
如何在var id
中分配值并打印出来?
答案 0 :(得分:1)
我只需要在UITextView类中添加一个额外的变量
您无法在扩展程序中添加存储的属性。唯一的方法是使用计算属性和相关对象,但这很难看。您应该编写一个继承UITextView的类。
如果您真的无法继承UITextView,请查看this如何使用具有计算属性的关联对象。
答案 1 :(得分:0)
不,你不能这样做,因为属性需要存储,添加属性会改变类的内存结构,并在可用性中引入许多其他问题。
扩展旨在增强行为,而不是从根本上改变一个类。因此,如果需要向类添加其他属性,可以使用使用父类为UITextView
答案 2 :(得分:0)
使用相关对象我解决了我的问题。
这是我的源代码( Swift3 )。 。
import ObjectiveC
var AssociatedObjectHandle: UInt8 = 0
extension UITextView
{
var id : String
{
get
{
return objc_getAssociatedObject(self, &AssociatedObjectHandle) as! String
}
set
{
objc_setAssociatedObject(self, &AssociatedObjectHandle, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
}
}
}
感谢 mag_zbc 和 rmaddy 提供有用的答案!