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

Function 访问swift函数中定义的函数,function,swift,Function,Swift,假设我有一个名为shape的类,定义如下: class NamedShape { var numberOfSides: Int = 0 var name: String init(name: String) { self.name = name } func simpleDescription() -> String { return "A shape with \(numberOfSides) sides."

假设我有一个名为shape的类,定义如下:

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()
我可以这样初始化它:

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()
并调用如下方法:

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

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

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

为了能够调用子UNC,代码应该是这样的

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

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

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

为了能够调用子UNC,代码应该是这样的

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

所以我认为嵌套在方法中的函数永远是函数而不是方法,是吗?是的。把它想象成一个闭包:你可以在定义它的函数/方法中使用,它的封闭函数/方法可以返回它,但是闭包本身在外部是不可见的,就像任何其他局部变量一样。嗯,如果嵌套函数总是一个函数而不是一个方法,你为什么称它为“函数/方法”?(有点希望Swift对方法和属性使用了不同的关键字。)通过函数/方法,我指的是嵌套函数的容器,因此我认为嵌套在方法中的函数始终是函数,而不是方法,是吗?是的。把它想象成一个闭包:你可以在定义它的函数/方法中使用,它的封闭函数/方法可以返回它,但是闭包本身在外部是不可见的,就像任何其他局部变量一样。嗯,如果嵌套函数总是一个函数而不是一个方法,你为什么称它为“函数/方法”?(有点希望Swift对方法和属性使用了不同的关键字。)按函数/方法我指的是嵌套函数的容器