访问swift中函数内定义的函数

时间:2014-07-10 18:33:04

标签: 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())

    }
}

我可以像这样初始化它:

let someNamedShape = NamedShape(name:"polynomial")

并调用这样的方法:

someNamedShape.containerFunc()

现在如何在其对象的 containerFunc 中调用 subFunc 方法?

编译器在尝试此操作时抱怨:

someNamedShape.containerFunc().subFunc()

1 个答案:

答案 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()