gpt4 book ai didi

objective-c - Xcode 8,禁用类级别属性

转载 作者:行者123 更新时间:2023-12-04 03:08:39 24 4
gpt4 key购买 nike

在 Xcode 8 中,Objective-C 略有变化。现在有类级别的属性。例如,NSBundle 的 header

@interface NSBundle : NSObject {
...

/* Methods for creating or retrieving bundle instances. */
#if FOUNDATION_SWIFT_SDK_EPOCH_AT_LEAST(8)
@property (class, readonly, strong) NSBundle *mainBundle;
#endif

+ (nullable instancetype)bundleWithPath:(NSString *)path;
- (nullable instancetype)initWithPath:(NSString *)path NS_DESIGNATED_INITIALIZER;

+ (nullable instancetype)bundleWithURL:(NSURL *)url NS_AVAILABLE(10_6, 4_0);
- (nullable instancetype)initWithURL:(NSURL *)url NS_AVAILABLE(10_6, 4_0);

+ (NSBundle *)bundleForClass:(Class)aClass;
+ (nullable NSBundle *)bundleWithIdentifier:(NSString *)identifier;

#if FOUNDATION_SWIFT_SDK_EPOCH_AT_LEAST(8)
@property (class, readonly, copy) NSArray<NSBundle *> *allBundles;
@property (class, readonly, copy) NSArray<NSBundle *> *allFrameworks;
#endif
...

看,主包。现在它被声明为 property但是用class关键词。我认为它代表 class level property .好的。

向下滚动后,我找到了这些代码。

#define NSLocalizedString(key, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:nil]
#define NSLocalizedStringFromTable(key, tbl, comment) \
[NSBundle.mainBundle localizedStringForKey:(key) value:@"" table:(tbl)]

看看,怎么样mainBundle被访问。但是我使用 JetBrains 的 AppCode,这个 IDE 将这样的结构视为无效代码。 [NSBundle mainBundle]变得无效,AS + (instancetype)mainBundle方法不存在。

我的问题是我能否以某种方式切换到旧的 ObjectiveC 风格编码而不切换 Xcode?

最佳答案

@property (class, readonly, strong) NSBundle *mainBundle;

这等同于此(带有一些有助于静态分析器和 Swift API 生成的额外元数据):

+ (NSBundle *)mainBundle;

如果您的 IDE/编译器随后未正确编译 [NSBundle mainBundle](或其中的等效项),那么您的 IDE/编译器已损坏。

关于objective-c - Xcode 8,禁用类级别属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39491142/

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