在类

时间:2016-11-25 15:17:12

标签: swift

在swift中,将多个函数共用于多个类的最佳实践是什么,这些类之间的继承是不可行的?

我是编程的新手,所以请不要屈尊俯就。就在几个月前我第一次开始学习的时候,我被告知重复代码的糟糕做法,当时我在Ruby编写,我可以在其中创建一个所有功能都驻留的模块,然后只需在任何模块中包含模块我希望使用这些函数的类。只要模块函数中的所有变量都在代码工作的类中声明。

在swift中是否有类似的做法,或者我应该做一些其他事情,比如制作一堆全局函数并将实例变量传递给那些函数?请尽可能具体,因为我会按照你的建议快速推进我写的所有代码,谢谢!

2 个答案:

答案 0 :(得分:0)

您的问题的简单答案是协议

定义协议

protocol ProtocolName {
    /* common functions */
    func echoTestString()
}

extension ProtocolName {
    /* default implementation */        
    func echoTestString() {
        print("default string")
    }
}

符合协议的类,默认实现

class ClassName: ProtocolName {

}

ClassName().echoTestString() // default string

符合协议的类,具有覆盖实现

class AnotherClass: ProtocolName {

    func echoTestString() {
        print("my string")
    }
}

AnotherClass().echoTestString() // my string

答案 1 :(得分:0)

虽然有意见,但我认为这是正确的路线 - 使用框架目标。协议也有效。但是使用框架,您可以:

  • 跨项目分享
  • 将所有内容保持在您所需的范围内
  • 以多种方式不可知

如果你想使用“include”Swift动词(及其附带的所有动词),你几乎需要使用Framework目标。如果你想完全拆分代码。当你在一个项目中时,使用协议,不想“重复”代码片段,并且知道你将永远是本地的。

如果你想要的是(a)跨项目使用协议,(b)包括真正的单独代码,(c)具有全局函数,而(d)传递实例变量......考虑单独的目标。

编辑:看看你的问题标题(“使用相同的函数”)并考虑OOP与函数式编程,我想我会添加一些不会改变我的解决方案但增强它的东西 - 函数式编程意味着你可以“通过“作为参数的函数。我不认为这就是你所说的,但它是你编码中另一部分是Swifty。