Swift和超类的属性继承

时间:2016-06-16 19:38:36

标签: ios swift inheritance swift2

我有一堂课。它的子类B.我需要覆盖其属性的类型。也可以改变协议。我怎么能这样做?

class A {
 var property: String (or SomeProtocolA)
}

class B: A {
 var property: Int (or SomeProtocolB)
}

也许可以为子类中的属性添加支持第二协议?

2 个答案:

答案 0 :(得分:0)

你不能,这表明设计很差。

假设A类有一个功能:

class A {
    var property: String (or SomeProtocolA)

    func getMyString() -> String {
        return property
    }
}

现在B级继承它,而“覆盖”property

class B : A {
    var property: Int(or SomeProtocolB)

    // func getMyString() -> String { //inherited from superclass
    //    return property //type error, expected String, returning Int
    //}
}

答案 1 :(得分:0)

你可以这样做,但是在非常有限的情况下。允许这样做的唯一方法是在以下情况下:

  1. 该属性必须仅为get
  2. 覆盖类型必须是原始类型的子类(因此不能structprotocolenum)。
  3. 以下是覆盖字符串的示例:

    class A {
        var property: NSString {
            return ""
        }
    } 
    
    class B: A {
        override var property: NSMutableString {
            return NSMutableString(string: "")
        }
    }