Swift return 种类型

Swift return types

我有这两个 类:Foo 和 Bar。 Foo 有一个初始化器和一个名为 makeObject 的构造函数。 Bar 扩展了 Foo,它也继承了 makeObject 函数。我知道使用 self 作为 makeObject 的 return 类型是不正确的,但我不知道如何将它设置为 return 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

您需要覆盖子类中的 makeobject 方法 (bar) 和 return 正确的类型。

使用 overrides 关键字简单地重复函数 def,并使用 super.whatever

访问基本方法

您可以将 return 类型声明为 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"

Option-click on fb in Xcode 也显示类型正确 推断为 Bar.