我正在尝试Range使用map类似于以下功能的函数进行扩展Array:
extension Range {
func map<T>(@noescape transform: (Element) -> T) -> [T] {
var result = Array<T>()
for i in self {
result.append(transform(i))
}
return result
}
}
Run Code Online (Sandbox Code Playgroud)
Element定义如下Range:
struct Range<Element : ForwardIndexType> : …
Run Code Online (Sandbox Code Playgroud)
我认为这看起来相当不错,但是在使用它时我得到一个编译器错误:
let cellSubtitles: [String?] = { // <-- Unable to infer closure type in the current context
return 0...42.map {
let week: Int = $0/7
switch week {
case 0: return nil
case 1: return "Last Week"
default: return "\(week) Weeks Ago"
}
}
}()
Run Code Online (Sandbox Code Playgroud)
请注意,错误是针对周围的闭包,而不是传递给的闭包map.
另外,将上面的第二行更改为
return (0...42 as Range<Int>).map {
Run Code Online (Sandbox Code Playgroud)
摆脱错误.
我不明白这一点,因为我的map函数应该[String?]在两种情况下都返回.而且不管怎么说,我会认为0...42是Range<Int>还没有投.
我正在使用Swift 2.0.
| 归档时间: |
|
| 查看次数: |
1222 次 |
| 最近记录: |