在Swift

时间:2019-07-11 15:40:40

标签: swift

因此,我尝试使用最新的Swift在Xcode中添加两个[String : Int]字典的值。我的代码如下所示。这两个词典的键都从q1q23,并附加值。这就是为什么随机数在23处停止的原因。键q1在此函数中没有用(这就是为什么随机数从2开始)的原因。字典值是由另一个视图控制器在seview期间给此viewController给出的,我不手动分配它们。字典中的值不需要是可选的,因为它们将被指定为可访问此viewController的值。

我已经使用了一个小时,但是我无法理解它们所适用的reduce,combin或map函数,在我只想添加时做的如此复杂的事情似乎忽略了一个更简单的方法

var p1Pre:[String:Int]  = [“q1” : 1]

var p2Pre:[String:Int]  = [“q1” : 1]
var combPre:[String:Int]  = [“q1” : 0]

var pick = 0

// generates random number 2-23
func pickRandom(){
    pick = Int.random(in:2...23)
} 

func addPrefs(){
    // this is where i'm having trouble
    combPre[“q\(pick)] = p1Pre[“q\(pick)”] + p2Pre[“q\(pick)”]
    print(combPre[“q\(pick)”]
    // I get an error at the plus sign here
}

我试图在两个字典(p1Prep2Pre)中的特定键处添加值,结果将存储在combPre中。我想构建一个函数,所以如果p1Pre[“q2”] == 1p2Pre[“q2”] == 2,那么combPre[“q2”] = 3。 我在加号“binary operator “+” cannot be applied to two ‘Int?’ Operands"上遇到错误。我将如何进行这项工作?谢谢

1 个答案:

答案 0 :(得分:2)

使用下标访问字典时,表达式的类型始终是值类型的可选,因为正在使用的键可能在字典中不存在。您不能将两个可选的Int一起添加。

您需要考虑以下情况:“如果字典中不存在键“q\(pick)”,该怎么办?”,并相应地解开两个可选键。

我认为,在键不存在的情况下,明智的做法是仅使用值0,因为它是加法的标识:

combPre[“q\(pick)] = (p1Pre[“q\(pick)”] ?? 0) + (p2Pre[“q\(pick)”] ?? 0)

如果您 100%确定该密钥将存在,则可以考虑强制展开该密钥:

combPre[“q\(pick)] = p1Pre[“q\(pick)”]! + p2Pre[“q\(pick)”]!

仅当您确定 100%时才这样做,例如,“如果密钥不存在,则必定发生了某些非常糟糕的事情”。