【问题标题】:Cannot convert value of type 'Array[String]' to expected argument type 'Set<String>'无法将“Array[String]”类型的值转换为预期的参数类型“Set<String>”
【发布时间】:2016-09-17 00:59:45
【问题描述】:

在 Swift 中,我有一个函数,我将一个数组传递给它,然后在另一个函数中使用该数组。我不断收到此错误:

无法将“Array[String]”类型的值转换为预期的参数类型“Set

@objc func getProductInfo(productIDs: Array<String>) -> Void {
    print(productIDs) //this works with correct data

    SwiftyStoreKit.retrieveProductsInfo(productIDs) { result in

    ...

其余的工作,并在我传入["Monthly", "Yearly", "etc..."] 的常规数组时进行测试。

【问题讨论】:

  • SwiftyStoreKit.retrieveProductsInfo() 的声明是什么样子的?
  • @RemyLebeau 它是一个接受产品 ID 数组的函数。当我硬输入数组 ["Monthly","Yearly"] 时,它没有问题。试图通过我的应用程序动态传递数组。
  • 这不是我问的。 retrieveProductsInfo()实际声明是什么?显然,它期望的不是你给它的东西,否则你不会得到错误。
  • func getProductInfo(productIDs: Set&lt;String&gt;
  • @LeoDabus 你是最棒的。如果您想“回答问题”,我可以接受您的回答。介意解释为什么 Set 是正确的答案吗?泰!

标签: arrays swift


【解决方案1】:

["Monthly", "Yearly", "etc..."] 不是一个数组,它是一个数组字面量。 Set 可以用数组字面量隐式初始化。

let ayeSet: Set<String> = ["a"] // Compiles

但是,它不能用数组隐式初始化。

let bees: Array<String> = ["b"]
let beeSet: Set<String> = bees // Causes Compiler Error

但是,如果你明确地初始化它,那么它就会起作用。

let sees: Array<String> = ["c"]
let seeSet: Set<String> = Set(sees) // Compiles

因此,在您的示例中,显式初始化应该可以工作。

@objc func getProductInfo(productIDs: Array<String>) -> Void {
    print(productIDs) //this works with correct data

    SwiftyStoreKit.retrieveProductsInfo(Set(productIDs)) { result in

    ...

【讨论】:

    【解决方案2】:

    你只需要改变你的方法参数类型。 SwiftyStoreKit 方法需要一个字符串集。你的方法声明应该是:

    func getProductInfo(productIDs: Set<String>)
    

    【讨论】:

      【解决方案3】:

      我在使用同一个库时遇到了这个问题。 这应该工作 SwiftyStoreKit.retrieveProductsInfo(Set(productIDs))

      【讨论】:

        猜你喜欢
        • 2016-01-14
        • 1970-01-01
        • 1970-01-01
        • 2020-12-30
        • 1970-01-01
        • 2021-03-13
        • 2015-12-24
        • 2023-04-05
        • 1970-01-01
        相关资源
        最近更新 更多