簡體   English   中英

無法從Swift的子類中轉換值

[英]Can't cast a value from a subclass Swift

我做了很多研究,但沒有找到問題的答案。 其他人則談論Swift類的基本問題。 我自己的課仍然有問題。 我也閱讀了有關課程的課程,但對我沒有幫助。

我有兩節課; 其中一個繼承自另一個。

這是我的課程代碼:

class GlobalUser {

    var uid: String!
    var publicName: String!
    var pushID: String!
    var firstName: String!
    var lastName: String!
    var example1: [String:String]!

    var fullName: String! {
        get {
            return firstName + " " + lastName
        }
    }

    init(document: DocumentSnapshot) {

        guard let data = document.data() else {
            print("Missing user information during initialization.")
            return
        }

        self.uid = document.documentID
        self.publicName = (data["publicName"] as? String)!
        self.pushID = (data["pushID"] as? String)!
        self.example1 = (data["example1"] as? [String : String])!

        let name = data["name"] as? [String:String]
        self.firstName = (name!["firstName"])!
        self.lastName = (name!["lastName"])!
    }

}

class InterestingUser: GlobalUser {

    var code: Int?
    var example: [String:String]?

    var number: Int! {
        get {
            return example.count
        }
    }

    override init(document: DocumentSnapshot) {
        super.init(document: document)
    }
}

然后我嘗試像這樣將GlobalUser轉換為InterestingUser

if let interestingUser = user as? InterestingUser {
...
}

但是這個演員總是失敗的...

任何想法? 在此先感謝您的幫助。

您遇到的錯誤是由於您的問題所引起的:“ 然后,我嘗試將GlobalUser強制轉換為類似這樣的... ”,這是由於繼承。

您的GlobalUser類是超類。 您的InterestingUserGlobalUser的子類。

因此,您的InterestingUser類“知道” GlobalUser因為它是父類,因此您可以將InterestingUser as? GlobalUser GlobalUser InterestingUser as? GlobalUser InterestingUser as? GlobalUser但並非相反。

例:

if let interstingUser = InterestingUser() as? GlobalUser {
    // this will succeed because InterestingUser inherits from GlobalUser
}

if let globalUser = GlobalUser() as? InterestingUser {
    // this will fail because GlobalUser is not a subclass of InterestingUser
}

這是一些游樂場代碼供您測試:

class GlobalUser {

}

class InterestingUser: GlobalUser {

}

class Demo {
    func comparison() {
        let interesting = InterestingUser()
        let global = GlobalUser()

        if let intere = interesting as? GlobalUser {
            print("Interesting is global as well")
        }
        if let global = global as? InterestingUser {
            print("Global is interesting")
        }
    }
}

let demo = Demo()
demo.comparison()
// prints 'Interesting is global as well'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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