可以像在VB.NET中一样在Objective-C中创建自定义属性属性吗?例如,在VB.NET中,您可以创建"Browsable"属性并在运行时读取它以确定是否应显示属性.
Public Class Employee
<Browsable(True)> _
Public Property Property1() As String
Get
End Get
Set(ByVal Value As String)
End Set
End Property
<Browsable(False)> _
Public Property Property2() As String
Get
End Get
Set(ByVal Value As String)
End Set
End Property
End Class
Run Code Online (Sandbox Code Playgroud)
我想在Objective-C中做同样的事情,即使它是一个固定的属性,只能在编译时设置,根本无法更改.
我要做的是为我的类的属性添加一个属性,以确定属性是否应该序列化.
我知道标准的Objective-C属性(只读,非原子等),但那些对我没有帮助......除非你有创造性地使用它们.我还研究了将C属性与__attribute__(("Insert attribute here"))关键字一起使用,但C具有特定用途的特定属性,我甚至不确定您是否可以在运行时读取它们.如果我错过了一个可以帮助我的话,请告诉我.
我试过用typdef.例如:
typdef int serializableInt;
serializableInt myInt;
Run Code Online (Sandbox Code Playgroud)
并使用property_getAttributes()Objective-C运行时函数,但它告诉我的是myInt是一个int.我想在这种情况下,typedef非常像一个宏......除非我能在运行时创建一个serializableInt类型的变量.无论如何,这里是关于你获得的价值的Apple文档property_getAttributes().
另一个要求是该属性必须与NSObject子类以及原始数据类型一起使用.我想到了将类黑名单或白名单添加到类中以便告诉我要跳过或序列化哪些属性的想法,这基本上是相同的想法.我只是试图将黑/白名单移动到属性,这样当你看到一个类的头文件时它很容易理解,它在我创建的任何类中都是一致的,并且它不易出错.
此外,这是需要考虑的事情.我真的不需要attribue有一个值(TRUE或FALSE; 1,2,3;或其他),因为属性本身就是值.如果属性存在,则序列化; 否则,跳过.
任何帮助表示赞赏.如果您确定在Objective-C上无法做到这一点,请告诉我.谢谢.