从“字典<anyhashable,any =“”>。键?”转换无关类型“ [Any]”总是失败

时间:2018-09-12 06:11:08

标签: swift dictionary

我收到此警告

“ Dictionary.Keys?”的发布无关类型“ [Any]”总是失败

我不知道如何解决此问题,请帮帮我

class func appendPram(_ url: String?, paramDict dict: [AnyHashable : Any]?) -> String? {
        var dict = dict
        var returnPath = "\(url ?? "")?"
        let keyArray = dict?.keys as? [Any]
        for key: String? in keyArray as? [String?] ?? [] {
            if (keyArray as NSArray?)?.index(of: key ?? "") == 0 || (keyArray as NSArray?)?.index(of: key ?? "") == keyArray?.count {
                if let aKey = dict?[key!] {
                    returnPath = "\(returnPath)\(key ?? "")=\(aKey)"
                }
            } else {
                if let aKey = dict?[key!] {
                    returnPath = "\(returnPath)&\(key ?? "")=\(aKey)"
                }
            }
        }
        return returnPath
    }

2 个答案:

答案 0 :(得分:3)

let keyArray = dict?.keys as? [Any]

此处无法进行转换,因为dict.keys的类型为[AnyHashable: Any].Keys。您正在尝试将该类型转换为数组。由于它们根本不相关,因此编译器会警告您这将始终失败。

最有可能,您打算转换为[AnyHashable]

[AnyHashable: Any].Keys转换为[AnyHashable]的一种正确方法是使用Array.init(Sequence)初始化程序:

 let keyArray = dict.map { Array($0.keys) }

答案 1 :(得分:0)

@Sweeper解释清楚。对于您而言,我认为这会有所帮助

let keyArray = dict["key"] as? [String]