假设我有一个类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())
}
}
Run Code Online (Sandbox Code Playgroud)
我可以像这样初始化它:
let someNamedShape = NamedShape(name:"polynomial")
Run Code Online (Sandbox Code Playgroud)
并调用一些这样的方法:
someNamedShape.containerFunc()
Run Code Online (Sandbox Code Playgroud)
现在如何我invoke方法subFunc内containerFunc的对象?
编译器在尝试时抱怨:
someNamedShape.containerFunc().subFunc()
Run Code Online (Sandbox Code Playgroud)
看起来这是不可能的,除非您从其包含函数返回内部函数。这是文档所说的
默认情况下,嵌套函数对外界是隐藏的,但仍然可以被它们的封闭函数调用和使用。封闭函数还可以返回其嵌套函数之一,以允许在另一个作用域中使用嵌套函数。
为了能够调用 subfunc,您的代码应该是这样的
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()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6203 次 |
最近记录: |