【问题标题】:NSArray element failed to match the Swift Array Element type Expected NSMutableArray but found __NSDictionaryI:NSArray 元素未能匹配 Swift Array 元素类型 Expected NSMutableArray 但找到 __NSDictionaryI:
【发布时间】:2020-01-07 04:43:37
【问题描述】:

我正在尝试将 NSMutableArray 从 Objective-C ViewController 传递给 Swift ViewController,问题是 Swift ViewController 无法理解 NSMutableArray 类型,当我尝试时他给了我这个错误在 Swift 中访问数组我得到这个错误:

前置条件失败:

NSArray 元素未能匹配 Swift Array 元素类型

应为 NSMutableArray,但找到了 __NSDictionaryI

我尝试了多种解决方案,例如使用以下代码将 NSMutableArray 转换为 Swift String 数组:

var swiftArray = objCMutableArray as NSArray as! [String]

或者这个:

let swiftArray: [String] = mutableArray.flatMap { $0 as? String }

但它总是给我这个错误:

无法将“__NSDictionaryI”(0x1083bdcf8) 类型的值转换为“NSString”

【问题讨论】:

  • 你有一个字典而不是一个字符串,你想如何将它作为字符串传递?
  • 我只想让 swift 视图控制器读取数组
  • as NSArray as! [String] — 为什么?
  • 你需要知道你在那个数组中有什么,或者即使它是一个数组,然后 swift 才能像那样读取它
  • 你有一个字典数组 ([NSDictionary]) 而不是 [String]。

标签: ios arrays objective-c swift type-conversion


【解决方案1】:

它应该可以工作

if let swiftArray = objCMutableArray as? [[String:AnyObject]]{
    print(swiftArray)
}

这是 NSmutableArray 元素在转换为字符串数组时的类型匹配问题。它应该是字典数组。

【讨论】:

    【解决方案2】:

    试试这个。

    if let swiftArray = objCMutableArray.mutableCopy() as? Array<Dictionary<String, AnyObject>> {
    
    }
    

    【讨论】:

    • 我已经编辑了我的答案。请检查可能有帮助。
    【解决方案3】:

    我找到的解决方案是,当我传递数组时,我将其转换为 NSData,以便 swift 可以使用以下代码读取它:

    NSData *data1 = [NSKeyedArchiver archivedDataWithRootObject:self.mSelectedBills];
    

    然后在 swift ViewController 中我使用这段代码来阅读它:

    @objc func setSelectedBillsData(selectedBillsData: NSData) {
        self.mData = selectedBillsData
        do {
            if let loadedStrings = try NSKeyedUnarchiver.unarchiveObject(with: selectedBillsData as Data) as? [[String:AnyObject]] {
                print(loadedStrings)
            }
        } catch {
            print("erreur.")
        }
    }
    

    【讨论】:

    • 为什么?这不是一个可行的解决方案。
    • 这就是我找到的解决方案,如果您有其他选择,请继续
    • 根据你之前的代码:var swiftArray = objCMutableArray as NSArray as! [String]=> var swiftArray = objCMutableArray as! [[String:AnyObject]]?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多