gpt4 book ai didi

objective-c - Objective-c 中的自定义属性

转载 作者:可可西里 更新时间:2023-11-01 03:13:53 26 4
gpt4 key购买 nike

是否可以像在 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

我想在 Objective-C 中做同样的事情,即使它是一个只能在编译时设置并且根本无法更改的固定属性。

我正在尝试做的是向我的类的属性添加一个属性以确定是否应该序列化这些属性。

我知道标准的 Objective-C 属性(只读、非原子等),但这些对我没有帮助……除非您有创造性的方式来使用它们。我还研究了将 C 属性与 __attribute__(("Insert attribute here")) 关键字一起使用,但 C 具有用于特定目的的特定属性,我什至不确定您是否可以阅读它们运行。如果我错过了一个可以帮助我的人,请告诉我。

我尝试使用 typdef。例如:

typdef int serializableInt;
serializableInt myInt;

并使用 property_getAttributes() Objective-C 运行时函数,但它只告诉我 myInt 是一个 int。我猜 typedef 在这种情况下很像一个宏……除非我可以在运行时创建一个 serializableInt 类型的变量。总之,这里是Apple's documentation关于从 property_getAttributes() 获得的值。

另一个要求是该属性必须与 NSObject 子类以及原始数据类型一起使用。我想到了将黑名单或白名单作为 ivar 添加到类中的想法,它会告诉我要跳过或序列化哪些属性,这基本上是相同的想法。我只是想将黑/白名单移到属性中,这样当您看到一个类的头文件时就很容易理解,它在我创建的任何类中都是一致的,并且不容易出错。

此外,这是需要考虑的事情。我真的不需要属性有值(TRUE 或 FALSE;1、2、3;或其他),因为属性本​​身就是值。如果属性存在,则序列化;否则,跳过。

感谢任何帮助。如果您确定这在 Objective-C 上是不可能的,请告诉我。谢谢。

最佳答案

如果你想给属性、类、方法或ivar添加属性,你可以尝试使用github.com/libObjCAttr .它真的很容易使用,通过 cocoapods 添加它,然后你可以像这样添加属性:

@interface Foo

RF_ATTRIBUTE(YourAttributeClass, property1 = value1)
@property id bar;

@end

在代码中:

YourAttributeClass *attribute = [NSDate RF_attributeForProperty:@"bar" withAttributeType:[YourAttributeClass class]];
// Do whatever you want with attribute, nil if no attribute with specified class
NSLog(@"%@", attribute.property1)

关于objective-c - Objective-c 中的自定义属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4919021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com