swift inout在闭包中无法使用
朋友自定义了个方法func block()接受一个闭包参数,然后在func test()里调用func block,给他传入了个{ () -> Void in a += 10 }闭包参数,可这
仅仅是完成了传让func block()接受了参数,在其方法体内没有执行,所以a += 10还没被执行, 正确代码如下:
func block(theBlock:(() -> Void)) {
print("here to run \"theBlock\" to complete a += 10")
theBlock()
}
func test(inout a :Int) {
block { () -> Void in
a += 10
}
}
var i = 1
test(&i)
顺便说说swift里闭包的写法是可以很简便的
首先闭包作为func的参数传入时,可以省略func的():
block( { () -> Void in
a += 10
})
省略后:
block { () -> Void in
a += 10
}
再者闭包的参数可以省略,返回值类型也可以自动根据闭包体内运算推算, 当然in关键词也可一同被省去
省略后:
block { a += 10 }
所以最后代码可以写成:
func block(theBlock:(() -> Void)) {
print("here to run \"theBlock\" to complete a += 10")
theBlock()
}
func test(inout a :Int) {
block { a += 10 }
}
var i = 1
test(&i)
正常来说是有效的哦,出现了什么问题吗