使swift类符合定义属性的objective c协议

时间:2015-03-31 08:38:11

标签: ios objective-c swift

我无法使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)作为前缀,以使它们只读,但这些变体都不起作用。

3 个答案:

答案 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()
   }

}