快速访问函数中定义的函数

Dev*_*shi 1 function swift

假设我有一个类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方法subFunccontainerFunc的对象?

编译器在尝试时抱怨:

someNamedShape.containerFunc().subFunc()
Run Code Online (Sandbox Code Playgroud)

Ant*_*nio 5

看起来这是不可能的,除非您从其包含函数返回内部函数。这是文档所说的

默认情况下,嵌套函数对外界是隐藏的,但仍然可以被它们的封闭函数调用和使用。封闭函数还可以返回其嵌套函数之一,以允许在另一个作用域中使用嵌套函数。

为了能够调用 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)