【问题标题】:Swift array.map - cannot invoke 'map'Swift array.map - 无法调用'map'
【发布时间】:2015-07-16 23:05:08
【问题描述】:

我在 xCode 6.4 中使用以下代码将数组中的字符串拆分为数组:

func getData() -> [String]
{
    let data = navData

    // navData is like:
    // A|xxx|xxx|xxx
    // R|ccc|ccc|ccc
    // N|ccc|ccc|ccc
    // N|ccc|ccc|ccc

    return split(data) { $0 == "\n" }
}

let data:[String] = getData()

func search(query:(String, Int)) -> [String]
{
    let recs:[String] = data.filter { $0.hasPrefix(query.0) }
    var cols: [String] = recs.map { split( recs ) { $0 == "|" } }
}

func searchQueries() -> [(String, Int)]
{
    return [("N", 1)] //key, column index
}


for q:(String, Int) in searchQueries()
{
    var results:[String] = search(q)
    for x in results
    {
        result = results[0]
    }
 }

它以前可以工作,但我猜 swift 在 1.2 中发生了变化,现在它给出了以下错误:

Cannot invoke 'map' with an argument list of type '(() -> _)'

有什么建议吗?

谢谢!

【问题讨论】:

  • @Mundi 我想我们可以假设data 看起来像["abc|def", "ghi|jkl"]
  • @Aaron Brager。是的,在 data.filter 之后,它看起来和你说的完全一样:[N|ccc|ccc|ccc,N|ccc|ccc|ccc]

标签: swift swift2


【解决方案1】:

在发现在 Swift 2 中您必须使用其 characters 属性拆分字符串后,我在 Playground 中完成了这项工作:

let recs = ["col1|col2|col3", "1|2|3"]
let cols = recs.map {
    split($0.characters) { $0 == "|" }.map {String($0)}
}
cols.first // ["col1", "col2", "col3"]
cols.last  // ["1", "2", "3"]

请注意,在 Swift 2 beta 2 中,您还可以在末尾使用 {String.init}

要在 Swift 1.2 中进行这项工作,请删除 .characters

【讨论】:

  • 谢谢你,蒙迪。您的代码不起作用。我怀疑是因为它与 swift 1.2 缺乏兼容性......无论如何,谢谢!当 v2 正式发布时会需要它。
  • 删除.characters:split($0) { $0 == "|" }.map {String($0)}就可以了
猜你喜欢
  • 2018-09-17
  • 2020-03-21
  • 2014-08-23
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 2021-06-24
相关资源
最近更新 更多