gpt4 book ai didi

Swift 返回类型

转载 作者:行者123 更新时间:2023-11-30 10:18:16 25 4
gpt4 key购买 nike

我有这两个类:Foo 和 Bar。Foo 有一个初始化程序和一个名为 makeObject 的构造函数。 Bar 扩展了 Foo,因此它也继承了 makeObject 函数。我知道使用 self 作为 makeObject 的返回类型是不正确的,但我不知道如何将其设置为返回 Bar 实例而不是 Foo 实例。

class Foo{
var x
init(x:Int){
self.x = x
}

class func makeObject(x:Int)->self{
return self(generateRandomNumber())
}

class func generateRandomNumber()->Int{
//...
}
}

class Bar:Foo{
//...
}


let fb = Bar.makeObject()
println(fb) // would return a Foo instance

最佳答案

您可以将返回类型声明为Self。这反过来又要求init 方法被标记为required init:

class Foo {
var x : Int

required init(x : Int) {
self.x = x
}

class func makeObject() -> Self {
return self(x: generateRandomNumber())
}

class func generateRandomNumber() -> Int {
return Int(arc4random_uniform(100))
}

func whatAmI() -> String {
return "I am a Foo"
}
}

class Bar:Foo {
override func whatAmI() -> String {
return "I am a Bar"
}
}

let fb = Bar.makeObject()
println(fb.whatAmI()) // "I am a Bar"

在 Xcode 中按住 Option 键单击 fb 也会显示类型正确推断为 Bar

关于Swift 返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28929202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com