Swift Dictionary <String,Any>获取可选值

自从我在macOS上完成任何工作以来已经过去了大约两年,而自从接触Swift以来已经过去了两年多。我正在对此进行圈子:

我有两个函数,第一个包含一个while循环,用于检查第二个返回的字典中的值。 :

func checkPath(_ strPath:String) { 

...
while bIsDesktop == false {
    let dictResults:Dictionary<String,Any> = checkPath(arrPath)

    if dictResults["isDesktop"] { //-->I'm getting crushed here
        //do something with returned array
    }

}

private func checkPath(_ arrPath:Array<String>) -> Dictionary<String,Any> {
    var bIsDesktop = false
    var arrPath = arrPath
    if arrPath[0] != "Desktop" {
       arrPath.removeFirst()
    } else {
       bIsDesktop = true
    }

    return ["paths":arrPath,"isDesktop":bIsDesktop]
}

arrPath是一个字符串数组(文件路径项)

我知道返回的字典就是这样[String:Any]

无论我遇到什么问题,我都会遇到某种编译器错误,例如:

Optional type 'Any?' cannot be used as a boolean; test for '!= nil' instead

在更为宏大的方案中,如果有一个更优雅的解决方案,我想做的就是剥离路径到/// File:User / username / Desktop /用户选择的文件夹。 。,并且只有Desktop / ...如果有比我尝试的解决方案更好的解决方案,我将不胜感激,但是如果您也可以解释为什么我无法从词典中删除可选内容,我也将不胜感激。

我尝试过:

guard let bIsDesktop = dictResults["isDesktop" as Bool else { ...
if dictResults?["isDesktop"]...

和其他各种排列。我得到nil或编译器错误。

jolon_zhang 回答:Swift Dictionary <String,Any>获取可选值

我确实认为您遇到了一个复杂的错误,但我没有测试您的整个故事。我为此表示歉意,并仍在尝试将其发布为解决方案。

据我所知,您正在尝试使用以下语句查看变量是否为真:

if dictResults["isDesktop"] { //-->I'm getting crushed here
        //do something with returned array
    }

问题是您知道或暗示 dictResult [“ isDesktop”] 处的字典条目是布尔值。但是,您的编译器不知道,因为您提供的知识可以是“任何”类型。

这不适用于编译器,因为它无法确定“任何”类型是true还是false。

据我了解,您首先必须将dictResult [“ isDesktop”]转换为布尔值,然后才能要求编译器将其评估为真还是假。如果不将其转换为布尔值,则必须将其视为非布尔值类型,并在if语句中告知编译器以将其评估为所需的值。

编译器错误基本上是在告诉您:“我不知道Any类型是什么?但是我知道它可以是一些值,也可以是无。如果您在语句中输入“ if(type),我认为您想要我来评估此可选值是否具有值。这不是您想要的,您想告诉编译器它需要将该语句评估为bool。

我认为两者都应该起作用:

if let result = dictResults["isDesktop"] as? bool {

}

if (dictResults["isDesktop"] as bool) {

}

同样,我还没有测试过,很抱歉。我确实认为这是解决此问题的方法。

亲切的问候, MacUserT

本文链接:https://www.f2er.com/3121077.html

大家都在问