![](/img/trans.png)
[英]How to make an Objective-C class conform to a protocol defined in Swift?
[英]Make swift class conform to objective c protocol that defines properties
我無法使快速類符合目標c協議。 在swift中很容易在目標c協議中實現這些方法,但我無法在以下協議中實現這些屬性。
協議是
@protocol ATLParticipant <NSObject>
@property (nonatomic, readonly) NSString *firstName;
@property (nonatomic, readonly) NSString *lastName;
@property (nonatomic, readonly) NSString *fullName;
@property (nonatomic, readonly) NSString *participantIdentifier;
@end
我已經制作了這個應該符合它的快速類,但是Xcode說它沒有。
class ConversationParticipant: NSObject, ATLParticipant {
var firstName: NSString?
var lastName: NSString?
var fullName: NSString?
var participantIdentifier: NSString?
override init() {
super.init()
}
}
我已經嘗試使成員變量可選(如上所述),並解包,並使用private(set)作為前綴,以使它們只讀,但這些變體都不起作用。
找到解決方案,在Swift中你不應該使用NSString,而是使用String類型。
class ConversationParticipant: NSObject, ATLParticipant {
var firstName: String!
var lastName: String!
var fullName: String!
var participantIdentifier: String!
var avatarImage: UIImage!
override init() {
super.init()
}
}
我實現了這個解決方案,但仍然出現錯誤:
“Type'ConversationParticipant'不符合協議'ATLAvatarItem'”
我添加了以下內容來解決它:
var avatarImageURL: NSURL!
var avatarImage: UIImage!
var avatarInitials: String!
工作得很好。
對於ATLParticipant ......
class ConversationParticipant: ConversationAvatarItem, ATLParticipant {
var firstName: String!
var lastName: String!
var fullName: String!
var participantIdentifier: String!
override init() {
super.init()
}
}
對於ATLAvatarItem ......
class ConversationAvatarItem: NSObject, ATLAvatarItem {
var avatarImageURL: NSURL!
var avatarImage: UIImage!
var avatarInitials: String!
override init() {
super.init()
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.