Function 访问swift函数中定义的函数
假设我有一个名为shape的类,定义如下: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."
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对方法和属性使用了不同的关键字。)按函数/方法我指的是嵌套函数的容器