假设我有一个类 NamedShape ,如下所示:
class NamedShape {
var numberOfSides: Int = 0
var name: String
init(name: String) {
self.name = name
}
func simpleDescription() -> String {
return "A shape with \(numberOfSides) sides."
}
func containerFunc() -> Void{
println("strange world")
func subFunc() -> String {
return "sub function returns string"
}
println(subFunc())
}
}
我可以像这样初始化它:
let someNamedShape = NamedShape(name:"polynomial")
并调用这样的方法:
someNamedShape.containerFunc()
现在如何在其对象的 containerFunc 中调用 subFunc 方法?
编译器在尝试此操作时抱怨:
someNamedShape.containerFunc().subFunc()
答案 0 :(得分:4)
看起来它是不可能的,除非你从包含函数返回内部函数。这是documentation所说的
默认情况下,嵌套函数对外界是隐藏的,但它们的封闭函数仍然可以调用它们。封闭函数也可以返回其嵌套函数之一,以允许嵌套函数在另一个范围内使用。
为了能够调用子函数
,这就是你的代码的样子class NamedShape {
var numberOfSides: Int = 0
var name: String
init(name: String) {
self.name = name
}
func simpleDescription() -> String {
return "A shape with \(numberOfSides) sides."
}
func containerFunc() -> (() -> String) {
println("strange world")
func subFunc() -> String {
return "sub function returns string"
}
println(subFunc())
return subFunc
}
}
let someNamedShape = NamedShape(name:"polynomial")
let subfunc = someNamedShape.containerFunc()
subfunc()