• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 面向协议(protocol)的编程和类 Swift

[复制链接]
菜鸟教程小白 发表于 2022-12-12 10:08:30 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试从流行的教程网站上实现面向协议(protocol)的类(class)观看教程。到目前为止,我的一切都是正确的,但由于某种原因,其中一个属性没有更新,而其他属性则更新了。 这是代码:

protocol Paintable  : class {
    var primaryBodyColor : String{get set}
    var secondaryBodyColor : [String]? {get set}

    func paint(newPrimaryColor : String, newSecondaryColor : [String]?)
}


extension Paintable   {
    var primaryBodyColor : String {
        get {
            return "Black"
        }
        set {
        }
    }
}

protocol Wheeled {
    var numberOfWheels : Int {get set}
}


extension Wheeled {
    var numberOfWheels : Int {
        get {
            return 4
        }

        set {
        }
    }
}
protocol EngineSize {
    var engineSizeCC : Int {get set}
}

extension EngineSize {
    var engineSizeCC : Int {
        return 2300
    }
}




class Honda : Transport, Paintable, Wheeled, EngineSize {
    var secondaryBodyColor : [String]?
    var engineSizeCC : Int
    //We can also override default initializer of protocol, here we are going to instantiate with our initializer
    init(engineSizeCC : Int){
        self.engineSizeCC = engineSizeCC
    }

    func paint(newPrimaryColor: String, newSecondaryColor: [String]?) {
        primaryBodyColor = newPrimaryColor
        secondaryBodyColor = newSecondaryColor
    }
}

var civic = Honda(engineSizeCC: 400)
civic.primaryBodyColor
civic.passengerCapacity
civic.numberOfWheels
civic.engineSizeCC

civic.paint("blue", newSecondaryColor: ["Red","urple"])
civic.primaryBodyColor -> "Black"
civic.secondaryColor -> ["Red"], ["urple"] 

我遇到的问题是primaryBodyColor 保持“黑色”,即使我调用“paint”函数将主色设置为“蓝色”和辅助色。

我是面向协议(protocol)编程的新手,因此我将感谢您对解决此问题的帮助。



Best Answer-推荐答案


Extensions 不能存储属性,这也许是你在 primaryBodyColor 的 setter 中没有任何代码的原因。 primaryBodyColor 的实现需要在结构/类中,就像您对 seondaryBodyColor 所做的那样。因此,如果在 Honda 类中的该行之前包含以下行,您的代码将按预期工作......

var primaryBodyColor = "black"

关于ios - 面向协议(protocol)的编程和类 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34774974/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap