尝试在 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()
}
}
我正在尝试在 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()
}
}