1)[String:Any]
不是數組,它是Dictionary<String, Any>
。我想你的意思是myArray
有型[[String:Any]]
2)Array
和Dictionary
類型的經過值迅速,而不是參考。所以tempValue
是不同的情況下有相同的價值觀
你可以試試這個代碼:
(self.myArray[0]["values"] as? [AnyObject])?.append("hello") // - wrong!!
UPDATE:
思考這個答案標記爲正確的,我發現問題了。看起來像(self.myArray[0]["values"] as! [AnyObject])
(即使用力展開)的結果將是不可改變的數組。所以你不能在其中使用append
方法。你需要覆蓋整個鍵用新的數組:
if var tempValue = self.myArray[0]["values"] as? [AnyObject] {
tempValue.append("hello")
self.myArray[0]["values"] = tempValue
}
更新2:
關於視圖控制器之間傳遞數據。讓我向您展示我的一個解決方案,用於從secondViewController
修改firstViewController
的設置。首先,我定義設置類:
class ControllerSettings: NSObject {
var userInfo = Dictionary<String, AnyObject?>()
var myArray = [AnyObject]()
override var description: String {return "- userInfo: \(userInfo)\n - myArray: \(myArray)"}
}
firstViewController
將使用settings
屬性將它保存設置,並通過引用此屬性,以孩子secondViewController
; secondViewController
後會修改和罷免,firstViewController
將能夠檢查變化viewWillAppear
方法
class FirstViewController: UIViewController {
var settings = ControllerSettings()
//...
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
print("here is actual settings:\n\(settings)")
//...
}
//...
func showSecondController() {
let secondViewController = SecondViewController()
secondViewController.firstViewControllerSettings = settings
presentViewController(secondViewController, animated: true, completion: nil)
}
}
class SecondViewController: UIViewController {
var firstViewControllerSettings: ControllerSettings?
//...
func mutateSettingsAndDismiss() {
firstViewControllerSettings?.myArray.append("NewSetting")
dismissViewControllerAnimated(true, completion: nil)
}
}
'[字符串:任何]'這不是一個數組,但字典 –
*「引用的數組......」 * - 您的問題從這裏開始。數組是*值類型*。 –
對不起,Ozgur。我編輯了它。 – user2434385