gpt4 book ai didi

objective-c - 如何声明由可变类型支持的不可变属性?

转载 作者:太空狗 更新时间:2023-10-30 03:13:44 25 4
gpt4 key购买 nike

我想声明一个公共(public)的不可变属性:

@interface Foo
@property(strong, readonly) NSSet *items;
@end

…在实现文件中支持可变类型:

@interface Foo (/* private interface*/)
@property(strong) NSMutableSet *items;
@end

@implementation
@synthesize items;
@end

我想要的是实现中的可变集合,当从外部访问时该集合被强制转换为不可变集合。 (我不在乎调用者可以将实例转换回 NSMutableSet 并破坏封装。我住在一个安静、体面的小镇,那里不会发生这种事情。)

现在,我的编译器在实现中将该属性视为 NSSet。我知道有很多方法可以让它工作,例如使用自定义 getter,但是有没有一种方法可以简单地使用声明的属性来完成它?

最佳答案

最简单的解决方案是

@interface Foo {
@private
NSMutableSet* _items;
}

@property (readonly) NSSet* items;

然后就

@synthesize items = _items;

在你的实现文件中。然后您可以通过 _items 访问可变集,但公共(public)接口(interface)将是一个不可变集。

关于objective-c - 如何声明由可变类型支持的不可变属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7710400/

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