如何添加一个Dictionary到另一个Dictionary使用Swift?
我正在使用该AlamoFire库发送JSON到REST server.
字典1
var dict1: [String: AnyObject] = [
kFacebook: [
kToken: token
]
]
Run Code Online (Sandbox Code Playgroud)
字典2
var dict2: [String: AnyObject] = [
kRequest: [
kTargetUserId: userId
]
]
Run Code Online (Sandbox Code Playgroud)
如何将两个词典组合成一个新词典,如下所示?
let parameters: [String: AnyObject] = [
kFacebook: [
kToken: token
],
kRequest: [
kTargetUserId: userId
]
]
Run Code Online (Sandbox Code Playgroud)
我试过dict1 += dict2但得到了编译错误.
提前致谢!
在Xcode 9中为Swift 4进行光泽项目之后
我得到以下错误,我不知道
闭包元组参数'(key:_,value:_)'不支持解构
码:
extension Dictionary
{
init(elements: [Element]) {
self.init()
for (key, value) in elements {
self[key] = value
}
}
func flatMap<KeyPrime, ValuePrime>(_ transform: (Key, Value) throws -> (KeyPrime, ValuePrime)?) rethrows -> [KeyPrime:ValuePrime] {
return Dictionary<KeyPrime, ValuePrime>(elements: try flatMap({ (key, value) in
return try transform(key, value)
}))
}
}
Run Code Online (Sandbox Code Playgroud)
此时出现错误 try flatMap({ (key, value)in
在Scala中,+ (k -> v) 运算符on immutable.Map返回包含immutable.Map原始内容的新内容以及新的键/值对.同样,在C#中,ImmutableDictionary.add(k, v)返回一个新的,更新的ImmutableDictionary.
然而,在Swift中,Dictionary似乎只有变异updateValue(v, forKey: k)函数和变异[k:v]运算符.
我想也许我可以玩一些技巧flatten(),但没有运气:
let updated = [original, [newKey: newValue]].flatten()
Run Code Online (Sandbox Code Playgroud)
抓住我
Cannot convert value of type '() -> FlattenCollection<[[String : AnyObject]]>'
to specified type '[String : AnyObject]'
Run Code Online (Sandbox Code Playgroud)
如何Dictionary从现有内容创建一个新的,修改过的不可变的?
更新:根据这个答案的说明,Swift字典是值类型,这个答案的可变版本,我想出了以下扩展运算符,但我对此并不感兴趣 - 似乎必须有一个更清洁的开箱即用的替代方案.
func + <K, V>(left: [K:V], right: [K:V]) -> [K:V] {
var union = left
for (k, v) in right …Run Code Online (Sandbox Code Playgroud) 我正在开发一个快速的应用程序,在某些时候我有一个类似于此的代码:
import UIKit
class ViewController: UIViewController {
private var a: UIImageView!
private var b: UIImageView!
private var c: UILabel!
private var d: UILabel!
private var e: UILabel!
private var f: UILabel!
private var g: UIView!
private var h: UIView!
private var i: UIView!
private var j: UIView!
private var k: UIImageView!
private var l: UIView!
private var m: UIView!
private var n: UIView!
private var o: UIView!
private var p: UIScrollView!
private var q: UIView!
override func viewDidLoad() {
super.viewDidLoad() …Run Code Online (Sandbox Code Playgroud) 我一直在努力解决这个问题5天.可不是闹着玩的.请帮忙!这是我遇到的问题.
我知道的:
我宣布var addressDict = Dictionary<Int, Array<String>>()为全局变量.现在,我了解下面的代码用于附加存储在addressDict中的数据并更改类型,以便将数据存储到NSUserDefaults中.
let data = NSKeyedArchiver.archivedDataWithRootObject(addressDict) //archiving
self.defaults.setObject(data, forKey: "addressDict") //storing
if let data2 = self.defaults.objectForKey("addressDict") as? NSData {
let addressDict2 = NSKeyedUnarchiver.unarchiveObjectWithData(data2)
}
Run Code Online (Sandbox Code Playgroud)
现在,每次运行应用程序时,存储的数据addressDict2都会被我覆盖,addressDict因为当应用程序启动时,没有数据存在addressDict.因此即使我可能已经添加了一些数据addressDict2,它也会被覆盖,addressDict因为它没有数据.
所以为了解决这个问题,我可以运行上面的代码,但没有行,self.defaults.setObject(data, forKey: "addressDict")现在,addressDict2不再被不包含数据的变量覆盖了addressDict.所以我追加的数据存储在addressDict2.但是,如果我这样做,我就不能再添加新信息,addressDict2因为我已经self.defaults.setObject(data, forKey: "addressDict")没有了.我希望你能在这里看到我的困境......
我想知道的:
这就是我希望我的代码要做的事情.我希望能够将新信息附加到某个变量中addressDict2.当应用程序启动时,我希望将addressDict2要复制的数据复制到其中addressDict.因此,这将导致addressDict保存我希望它保留的数据.
我尝试过的:
为了试图解释我的意思,这里有一些代码.请注意,这段代码不起作用,只是为了澄清我的意思,并表明以下代码是否有效,它会解决我的问题,我想(如果我错了请纠正我).所以在我viewDidLoad(),我会像如下:
override func viewDidLoad() …Run Code Online (Sandbox Code Playgroud) Swift给了我们很多新的能力,比如(最后!)连接字符串甚至是数组.但不支持词典.连接字典的唯一方法是为它们重载+操作吗?
let string = "Hello" + "World" // "HelloWorld"
let array = ["Hello"] + ["World"] // ["Hello", "World"]
let dict = ["1" : "Hello"] + ["2" : "World"] // error =(
Run Code Online (Sandbox Code Playgroud) 在 Firebase 实时数据库中,这是一个非常常见的事务性事物
发生某种状态,您需要将项目从 A“移动”到 B。
所以,我当然是说这可能是一个云功能。
显然,这个操作必须是原子的,你必须注意赛道效应等等。
所以,对于项目 123456,你必须做三件事
所有原子,带锁。
简而言之,Firebase 实现这一目标的方法是什么?
已经有很棒的 ref.transaction 系统,但我认为它与这里无关。
也许以一种变态的方式使用触发器?
IDK
对于在这里谷歌搜索的任何人来说,值得注意的是令人难以置信的新 Firestore(很难想象有什么比传统 Firebase 更令人难以置信的东西,但你有它......),新的 Firestore 系统内置了. ......
这个问题是关于传统的 Firebase Realtime 的。
根据这个页面,可以将一个完整的字典添加到另一个 http://code.tutsplus.com/tutorials/an-introduction-to-swift-part-1--cms-21389
但运行代码给了我编译错误
var dictionary = ["cat": 2,"dog":4,"snake":8]; // mutable dictionary
dictionary["lion"] = 7; // add element to dictionary
dictionary += ["bear":1,"mouse":6]; // add dictionary to dictionary
Run Code Online (Sandbox Code Playgroud)
错误:
[string: Int] is not identical to UInt8
Run Code Online (Sandbox Code Playgroud)
是否有正确的方法在swift中执行此功能?我应该逐一添加它们?
我正在学习 Swift,但找不到解决我的问题的方法......
我有两个字典并想将它们合并:
dict1 = ["A": 1, "B": 2, "D": 5]
dict2 = ["A": 3, "C": 9, "D": 4]
Run Code Online (Sandbox Code Playgroud)
结果应该是一个新的字典,例如:
dict3 = ["A": 4, "B": 2, "C": 9, "D": 9]
Run Code Online (Sandbox Code Playgroud) swift ×8
dictionary ×4
ios ×4
xcode ×2
addition ×1
arrays ×1
firebase ×1
immutability ×1
json ×1
nsdictionary ×1
swift4 ×1
xcode6 ×1
xcode9-beta ×1