Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:使用类初始化器和'初始化实例方法;让';。对吗?_Swift_Initialization_Let_Instance Method - Fatal编程技术网

Swift:使用类初始化器和'初始化实例方法;让';。对吗?

Swift:使用类初始化器和'初始化实例方法;让';。对吗?,swift,initialization,let,instance-method,Swift,Initialization,Let,Instance Method,通过这个简化的单元类,我有一个名为myMethod的未设置方法,它在创建新实例时初始化 typealias Converter = (input: Double) -> Double class Unit { let name: String let myMethod: Converter init(name: String, method: Converter) { self.name = name self.myMethod

通过这个简化的
单元
类,我有一个名为
myMethod
未设置方法,它在创建新实例时初始化

typealias Converter = (input: Double) -> Double

class Unit {
    let name: String
    let myMethod: Converter

    init(name: String, method: Converter) {
        self.name = name
        self.myMethod = method
    }
}
要创建该类的实例,请在初始化中附加一个
转换器
类型函数
celsiusToKelvin()
),如下所示:

func celsiusToKelvin(input: Double) -> Double { return input + 273.15 }

let celsius = Unit(name: "Celsius", method: celsiusToKelvin)
现在我可以使用与任何实例方法相同的
celsius.myMethod()
,即使我没有在
单元
类中将其定义为
func

问题:

1)这是向类的特定实例添加方法的有效方法吗

2)对于
结构也可以这样做吗

3)还有其他(更好/更安全的)方法来实现这一点吗


谢谢。

这是完全有效的,但有几点意见:1。调用things
method
非常糟糕,只需调用它
converter
。2.通常人们不会通过
func
,而是直接通过闭包。3.它可以很容易地用于结构,甚至是常量结构。但是,根据您的体系结构,将每个单元作为子类而不是动态生成它们可能更具可读性。感谢您的反馈!是的,我刚刚在这里调用了
方法
,以便在类定义中清楚地说明这一点。如果我使用子类,我会在调用它们的方法之前创建实例吗?这真的取决于你怎么做。您可以使用类方法。