2015-03-31 11 views
6

परिभाषित करता है मुझे एक त्वरित सी प्रोटोकॉल के अनुरूप एक स्विफ्ट क्लास बनाने में परेशानी हो रही है। स्विफ्ट में एक उद्देश्य सी प्रोटोकॉल में विधियों को कार्यान्वित करना आसान है, लेकिन मैं निम्नलिखित प्रोटोकॉल में गुणों को लागू नहीं कर सकता।स्विफ्ट क्लास को उद्देश्य सी प्रोटोकॉल के अनुरूप बनाएं जो गुण

प्रोटोकॉल

@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() 
    } 
} 

मैं सदस्य चर वैकल्पिक (जैसा कि ऊपर), और unwrapped बनाने की कोशिश की है, और निजी (सेट) के साथ उपसर्ग उन्हें केवल पढ़ने के लिए बनाने के लिए, लेकिन ये विविधताएं में से कोई भी काम करते हैं।

उत्तर

7

समाधान मिला, स्विफ्ट में आपको एनएसएसटींग का उपयोग नहीं करना चाहिए, लेकिन स्ट्रिंग प्रकार का उपयोग नहीं करना चाहिए।

class ConversationParticipant: NSObject, ATLParticipant { 

    var firstName: String! 
    var lastName: String! 
    var fullName: String! 
    var participantIdentifier: String! 
    var avatarImage: UIImage! 

    override init() { 
     super.init() 
    } 
} 
+0

आप कैसे इस जैसे अन्य प्रतिनिधि गुण और NSDictionaries, के लिए यह करने के लिए जानते हो nonatomic) id प्रतिनिधि; संपत्ति (मजबूत, nonatomic) NSDictionary * blogSocialNetworkUserNames; – Carlo

1

मैं इस समाधान को लागू किया है और अभी भी एक त्रुटि मिली:

:

"प्रकार 'ConversationParticipant' प्रोटोकॉल 'ATLAvatarItem' के अनुरूप नहीं है"

मैं इसे हल करने के लिए निम्नलिखित जोड़ा

var avatarImageURL: NSURL! 
var avatarImage: UIImage! 
var avatarInitials: String! 

और ठीक काम किया। , संपत्ति (मजबूत:

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

} 
संबंधित मुद्दे