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
.
我有这两个 类: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
.