0
我使用的功能String.withCString()
如下:什么类型的函数输入到String.withCString()?
let s = "Hey!"
let c = s.withCString {
strlen($0)
}
println(c)
但是,如果我第二个行添加到withCString关闭,我得到一个错误
let s = "Hey!"
let c = s.withCString {
println("test")
strlen($0)
}
println(c)
的错误是:“无法转换(($ T4) - > $ T3) - >(($ T4) - > $ T3) - > $ T3'来输入'Result'
看看withCString
的声明说:
func withCString<Result>(f: (UnsafePointer<Int8>) -> Result) -> Result
我一直在解释说f
参数是一个函数,它将UnsafePointer<Int8>
作为输入并返回某种类型的结果。这就是我的第二个例子。第二个示例块有什么问题?
闭包类型声明''(cstr) - > UInt in'是完成这个工作所必需的。你知道为什么会这样吗?我期望's.withCString {println(“test”);返回strlen($ 0)}''和你的示例代码一样好。 – kubi 2014-10-29 15:14:36
因为编译器不会假定返回类型,除非它是单表达式关闭。我认为,这是通过语言设计。 – rintaro 2014-10-29 16:29:37