【问题标题】:Swift map array of arrays to array of tuples - 'map' produces [T], not the expectedSwift 将数组数组映射到元组数组 - 'map' 产生 [T],而不是预期的
【发布时间】:2017-07-18 16:09:45
【问题描述】:

我确定我在这里做了一些愚蠢的事情,但不明白是什么。

目标是将数组数组(在 json 中为:[[0.1, 0.2, "Text"], ...])映射到 CGPoint/String 对的元组数组:[CGPoint(0.1, 0.2), "Text"]

我有一个看起来像这样的容器类:

struct Foo {
    let text: [(CGPoint, String)]

    init(json: [String: Any]) throws {
      let textraw = (json["text"] ?? []) as! [[Any]]

      text = textraw.map {  // <- Error here
        (a) -> (CGPoint, String) in
        return (CGPoint(a[0] as! CGFloat, a[1] as! CGFloat), a[2] as! String)
      }
   }
}

错误信息是:

'map' 产生 '[T]',而不是预期的上下文结果类型 '[(CGPoint, String)]'

我不明白为什么 swift 无法确定块在这里返回正确的类型?

【问题讨论】:

    标签: ios arrays swift


    【解决方案1】:

    您没有说明您使用的是哪个版本的 Swift,但您的代码在 Swift 3 和 4 上看起来不错,只是您缺少 CGPoint 初始化程序的参数标签:

    return (CGPoint(x: a[0] as! CGFloat, y: a[1] as! CGFloat), a[2] as! String)
    

    【讨论】:

      【解决方案2】:

      好的,我解决了,这里的错误信息真的很不幸。

      我设法忘记了 CGPoint 构造函数的工作原理 - CGPoint(x:, y:) 而不是 CGPoint(,)。这是真正的错误。修复相关行阅读:

      return (CGPoint(x: a[0] as! CGFloat, y: a[1] as! CGFloat), a[2] as! String)
      

      解决了问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-18
        • 2021-04-18
        • 2017-07-31
        • 2020-12-24
        相关资源
        最近更新 更多