首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >超类中的Swift和属性继承

超类中的Swift和属性继承
EN

Stack Overflow用户
提问于 2016-06-17 03:38:36
回答 2查看 437关注 0票数 0

我有课要上。以及它的子类B。我需要重写它的属性类型。此外,更改协议也是可以的。我该怎么做呢?

代码语言:javascript
运行
复制
class A {
 var property: String (or SomeProtocolA)
}

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

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

EN

回答 2

Stack Overflow用户

发布于 2016-06-17 03:57:07

你不能,这是一个糟糕的设计。

假设A类有一个函数:

代码语言:javascript
运行
复制
class A {
    var property: String (or SomeProtocolA)

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

现在B类继承了它,同时“覆盖”了property

代码语言:javascript
运行
复制
class B : A {
    var property: Int(or SomeProtocolB)

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

Stack Overflow用户

发布于 2016-06-17 04:05:08

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

  1. 属性必须为get
  2. 重写类型必须是原始类型的子类(因此没有structprotocol

下面是一个使用字符串覆盖的示例:

代码语言:javascript
运行
复制
class A {
    var property: NSString {
        return ""
    }
} 

class B: A {
    override var property: NSMutableString {
        return NSMutableString(string: "")
    }
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37868025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档