【问题标题】:no exact matches in call to instance method 'append'调用实例方法“附加”时没有完全匹配
【发布时间】:2021-12-14 17:27:32
【问题描述】:

我正在为 React Native 创建原生模块。我正在尝试在 Swift 中处理数据,这是函数

func getCornerPoints(_ cornerPoints: [AnyHashable]?) -> [AnyHashable]? {
    var result: [AnyHashable] = []
    
    if cornerPoints == nil {
      return result
    }
    for point in cornerPoints ?? [] {
      guard let point = point as? NSValue else {
        continue
      }
      var resultPoint: [AnyHashable: Any] = [:]
      resultPoint["x"] = NSNumber(value: Float(point.cgPointValue.x))
      resultPoint["y"] = NSNumber(value: Float(point.cgPointValue.y))
      
      result.append(resultPoint) // error is here "No exact matches in call to instance method 'append'"
    }
    return result
  }

【问题讨论】:

  • @vadian 好的。将Any 更改为NSNumber 可以回答我的问题,但是,如果值不仅是NSNumber swift var linesElements: [AnyHashable] = [] for line in lines { var l: [AnyHashable: Any] = [:] l["text"] = line.text l["cornerPoints"] = getCornerPoints(line.cornerPoints) linesElements.append(l) }

标签: arrays swift


【解决方案1】:

Any 不符合Hashable 因此[AnyHashable: Any](变量resultPoint)不能用AnyHashable 表示。

但是为什么 resultPoint 的值是 Any 呢?显然是NSNumber。 如果你声明 resultPoint

var resultPoint: [AnyHashable: NSNumber] = [:]

然后代码编译。

为什么返回类型是可选的? result 也很明显是非可选的

【讨论】:

  • 请注意Swift implicitly converts to AnyHashable。所以“[AnyHashable: Any]不等于AnyHashable”并不重要。重要的是[AnyHashable: Any]符合Hashable(因为Any 不符合Hashable)。
猜你喜欢
  • 1970-01-01
  • 2022-11-09
  • 2022-09-28
  • 1970-01-01
  • 2020-09-16
  • 2023-03-18
  • 2021-03-14
  • 2022-11-19
  • 1970-01-01
相关资源
最近更新 更多