我无法使swift类符合目标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)作为前缀,以使它们只读,但这些变体都不起作用。
答案 0 :(得分:7)
找到解决方案,在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()
}
}
答案 1 :(得分:1)
我实施了这个解决方案但仍然出错:
“Type'ConversationParticipant'不符合协议'ATLAvatarItem'”
我添加了以下内容来解决它:
var avatarImageURL: NSURL!
var avatarImage: UIImage!
var avatarInitials: String!
并且工作得很好。
答案 2 :(得分:0)
对于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()
}
}