我做了很多研究,但没有找到我问题的答案。其他人则用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)
    }
}

然后我试着把aGlobalUser转换成这样的aInterestingUser
if let interestingUser = user as? InterestingUser {
...
}

但这个演员总是失败。。。
知道吗?提前谢谢你的帮助。

最佳答案

您遇到的错误是由于您的问题中的以下语句造成的:“然后我尝试将GlobalUser转换为像这样感兴趣的用户…”,这是由于继承造成的。
你的类是超类。你的GlobalUser是你的InterestingUser的一个子类。
所以你的GlobalUser类“知道”这个InterestingUser,因为它是它的父类,你可以投射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'

10-07 21:02