簡體   English   中英

使swift類符合定義屬性的objective c協議

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM