【发布时间】:2018-12-08 22:08:48
【问题描述】:
我有一个奇怪的案例,我有以下 Objective C 协议:
NS_ASSUME_NONNULL_BEGIN
@protocol AccountCriteria <NSObject>
- (BOOL)criteriaIsApplicableForIdentifier:(NSString *)identifier;
- (nullable id <ModularFactory>)criteriaMetForAccount:(Account *)account error:(NSError **)error NS_SWIFT_NOTHROW;
@end
NS_ASSUME_NONNULL_END
我决定让一个 Swift 类实现协议,如下所示:
import Foundation
@objc(PaymentCriteria)
public class PaymentCriteria: NSObject, AccountCriteria {
public func criteriaIsApplicable(forIdentifier identifier: String) -> Bool {
//Lots of code here
}
public func criteriaMet(for account: Account, error: NSErrorPointer) -> ModularFactory? {
//Lots of code here
}
}
目的是在其他Objective C 代码中使用PaymentCriteria 类。然而,有了这个特定的代码,我不断收到Lexical or Preprocessor Issue。现在,如果我从课程中删除public,一切都会很好。但是,我不能在任何 Objective C 代码中使用PaymentCriteria。
如果我将课程保持为公开,但从课程中删除 AccountCriteria,一切仍然正常。但是,我必须让这个类遵守协议。所以这条路线对我也没有多大帮助。
所以我的问题是,为什么我不能让 Swift 类遵守 Objective C 协议,然后尝试在 Objective C 中使用该 Swift 类?还是我在 Swift 课程中做错了什么有害的事情?
【问题讨论】:
标签: ios objective-c swift