学习Swift并遇到了这个例子。 () - >的目的是什么?在第一行服务中,您将如何在其他简单示例中使用它?
func buildIncrementor() -> () -> Int {
var count = 0
func incrementor () -> Int {
++count
return count
}
return incrementor
}
var incrementor = buildIncrementor()
incrementor()
incrementor()
答案 0 :(得分:6)
读作:
你正在创建一个不带参数的函数buildIncrementor
并返回一个函数
-> ()
返回一个int:
-> Int
虽然我在编码时不会写这个,但我觉得我好像在读它:
func buildIncrementor() -> (() -> Int) {
var count = 0
func incrementor () -> Int {
++count
return count
}
return incrementor
}
请注意附加的括号。这样看起来就像我说的那样:buildIncrementor
返回另一个函数。 buildIncrementor
返回的函数不带参数,并返回Int
。
答案 1 :(得分:4)
空元组()
与Void
相同。您可以将其视为
func buildIncrementor() -> (Void -> Int)
返回类型buildIncrementor
的函数Void -> Int
,即闭包/函数,取Void
(无)并返回Int
BTW功能可以简化为
func buildIncrementor() -> () -> Int {
var count = 0
return { ++count }
}
答案 2 :(得分:2)
buildIncrementor
函数不执行任何操作并返回函数。返回函数的类型是() -> Int
,这意味着什么都不返回Int
。每当涉及箭头时,你正在处理函数或闭包。左边的东西是输入值和正确输出值上的东西。
答案 3 :(得分:1)
buildIncrementor()
返回一个函数,因为它的返回类型。
()
表示 - 该功能不带任何参数-> Int
表示它返回一个Int作为它的返回类型。总的来说,它类似于:
func buildIncrementor() -> (Void) -> Int
{
}
或以其他方式:
func buildIncrementor() -> ((Void) -> Int)
{
}
incrementor() // Will Return 1
incrementor() // Will Return 2
中返回功能的更多信息
答案 4 :(得分:0)
您的功能简明扼要地写为:
func incrementor (var value : Int = 0) -> () -> Int {
return { return value++ }
}
函数incrementor
接受一个参数value
并返回() -> Int
,它本身就是一个函数。无需命名内部函数incrementor
;你可以简单地使用匿名'封闭'。您可以将其用作
var inc_from_10 = incremenator (value: 10)
inc_from_10() // 10
inc_from_10() // 11
返回函数的函数在像Swift这样的语言中很自然,其中函数是“一等”(可赋值给变量)。结合通用类型和一些复杂的形式成型。
// Return a function to test equality with an obj
func equate<T> (#pred: (T, T) -> Bool) (x:T) -> (T) -> Bool {
return { (y:T) in return pred (x, y) }
}
var equalToTen = equate (pred: ==) (x: 10) // curry syntax
// Return a function to complement a predicate
func complement<T> (#pred : (T) -> Bool) -> (T) -> Bool {
return { (x:T) in return !pred(x) }
}
var notEqualToTen = complement(equalToTen)
// Return a function conjoining two predicates
func conjoin<T> (#pred1: (T) -> Bool, #pred2: (T) -> Bool) -> (T) -> Bool {
return { (x:T) in pred1 (x) && pred2 (x) }
}
现在,您开始在reduce
,map
和filter
等序列函数中使用这些函数。