尝试在 Swift 中实现 ObjectiveC 协议

Trying to implement ObjectiveC protocol in Swift

我正在尝试在 Swift 中实现以下协议,该协议是在 objective-c 中编写的,但是我仍然收到编译器错误,指出 class 不符合协议。我究竟做错了什么?我已经尝试设置 getter 和 setter 并应用 @NSCopying 标志但无济于事。

#import <Foundation/Foundation.h>

@protocol AIConfiguration <NSObject>

@property(nonatomic, copy) NSURL *baseURL;

@property(nonatomic, copy) NSString *clientAccessToken;

@property(nonatomic, copy) NSString *subscriptionKey;

@end

这是我的实现

class AIMyConfiguration : NSObject, AIConfiguration {

    var baseURL : NSURL
    var clientAccessToken : NSString
    var subscriptionKey : NSString

    override init() {
        super.init()
    }
}

谢谢

这个Objective-C协议:

@protocol AIConfiguration <NSObject>
@property(nonatomic, copy) NSURL *baseURL;
@property(nonatomic, copy) NSString *clientAccessToken;
@property(nonatomic, copy) NSString *subscriptionKey;
@end

翻译成Swift为:

protocol AIConfiguration : NSObjectProtocol {
    @NSCopying var baseURL: NSURL! { get set }
    var clientAccessToken: String! { get set }
    var subscriptionKey: String! { get set }
}

所以你必须像这样实现:

作为ImplicitlyUnwrappedOptional

class AIMyConfiguration: NSObject, AIConfiguration {
    @NSCopying var baseURL: NSURL!
    var clientAccessToken: String!
    var subscriptionKey: String!

    override init() {
        super.init()
    }
}

Optional:

class AIMyConfiguration: NSObject, AIConfiguration {
    @NSCopying var baseURL: NSURL?
    var clientAccessToken: String?
    var subscriptionKey: String?

    override init() {
        super.init()
    }
}

或非可选:

class AIMyConfiguration: NSObject, AIConfiguration {
    @NSCopying var baseURL: NSURL
    var clientAccessToken: String
    var subscriptionKey: String

    init(baseURL:NSURL, clientAccessToken:String, subscriptionKey:String) {
        self.baseURL = baseURL
        self.clientAccessToken = clientAccessToken
        self.subscriptionKey = subscriptionKey
        super.init()
    }
}