arrays - स्विफ्ट अर्रेकॉन्टेन() पीएफयूएसर सबक्लेस के डुप्लिकेट फ़्यूज़ को बुला नहीं देता



swift parse.com (1)

मुझे लगता है कि यह एक NSObject मुद्दा है

class MYUserNSObject: NSObject {
    dynamic var fullName: String

    init(fullName: String) {
        self.fullName = fullName
        super.init()
    }
}

func ==(left: MYUserNSObject, right: MYUserNSObject) -> Bool {
    return left.fullName == right.fullName
}

let objectUsers = [MYUserNSObject(fullName: "a"), MYUserNSObject(fullName: "b")]
let objectResult = objectUsers.contains(MYUserNSObject(fullName: "a"))
print("\(result)")

प्रिंट गलत

class MYUserSwift: Equatable {
    var fullName: String

    init(fullName: String) {
        self.fullName = fullName
    }
}

func ==(left: MYUserSwift, right: MYUserSwift) -> Bool {
    return left.fullName == right.fullName
}

let swiftUsers = [MYUserSwift(fullName: "a"), MYUserSwift(fullName: "b")]
let swiftResult = swiftUsers.contains(MYUserSwift(fullName: "a"))
print("\(swiftResult)")

प्रिंट सही

अंत में, जोड़कर -isEqual: मैंने यह तय किया है।

class MYUserNSObject: NSObject {
    dynamic var fullName: String

    init(fullName: String) {
        self.fullName = fullName
        super.init()
    }

    override func isEqual(object: AnyObject?) -> Bool {
        guard let user = object as? MYUserNSObject else { return false }
        return self == user
    }
}

func ==(left: MYUserNSObject, right: MYUserNSObject) -> Bool {
    return left.fullName == right.fullName
}

let objectUsers = [MYUserNSObject(fullName: "a"), MYUserNSObject(fullName: "b")]
let objectResult = objectUsers.contains(MYUserNSObject(fullName: "a"))
print("\(objectResult)")

प्रिंट सही

इस सवाल का पहले से ही उत्तर दिया गया है:

मेरे पास PFUser - MYUser वर्ग का उप-वर्ग है, जिसमे वस्तु ईसाई की तुलना करने के लिए समान कार्य के कार्यान्वयन है:

func ==(left: MYUser, right: MYUser) -> Bool {
    return left.objectId == right.objectId
}

लेकिन जब मैं Array.contains () विधि को कॉल करता हूं तो यह समता योग्य फ़ंक्शन के कार्यान्वयन को कॉल नहीं करता है, जो गलत परिणामों की ओर जाता है। उदाहरण के लिए, यहां:

let hasUser = self.selectedUsers.contains(currentUser)

hasUser गलत हो जाता है अगर चयनित उपयोगकर्ता सरणी में भिन्न मेमोरी ऑब्जेक्ट है लेकिन साथ ही currentUser के समान वस्तु आईडी के साथ

क्या दिलचस्प, समानतापूर्ण कार्यान्वयन को प्रत्यक्ष उपयोग में कहा जाता है। यहाँ:

var hasUser = false
for itUser in self.selectedUsers {
  if itUser == currentUser {
    hasUser = true
    break
  }
}

== ऑपरेटर को सफलतापूर्वक बुलाया गया था और हैयूसर के पास विभिन्न मेमोरी ऑब्जेक्ट्स के लिए सही मूल्य है, लेकिन उसी ऑब्जेक्ट आईडी के साथ

इसका कारण क्या हो सकता है?

अद्यतन करें। यहां MYUser वर्ग है:

class MYUser: PFUser {

    // MARK: - Parse Object

    @NSManaged var avatarFile: PFFile?
    @NSManaged var fullName: String?

    // MARK: - PFSubclassing Methods (through PFUser)

    override class func initialize() {
        struct Static {
            static var onceToken : dispatch_once_t = 0;
        }
        dispatch_once(&Static.onceToken) {
            self.registerSubclass()
        }
    }
}

func ==(left: MYUser, right: MYUser) -> Bool {
    return left.objectId == right.objectId
}




pfuser