Я пытался отладить что-то в своем коде и наткнулся на это. Вы можете поместить это прямо в playground
.Почему значение в этом словаре изменяется?
import UIKit
class testObj {
var prop1: Int?
}
var testObjInst = testObj()
var myDic : [String : testObj] = [:]
testObjInst.prop1 = 1
myDic["A"] = testObjInst
testObjInst.prop1 = 2
myDic["B"] = testObjInst
testObjInst.prop1 = 3
myDic["C"] = testObjInst
print(myDic["A"]?.prop1) //prints 3
if let myVal = myDic["A"] {
myVal.prop1 = 5
}
print(myDic["A"]?.prop1) //prints 5
Как переменная myVal
изменения значения для myDic["A"]
? Не следует ли присвоить myVal
результат вызова myDic["A"]
, и возврат этого вызова в конечном итоге станет новым экземпляром объекта?
Edit 1: Мои перетекает выполняются так:
if segue.identifier == segueIDs.air {
if let vc = segue.destination as? PointsTableViewController {
//these are the dictionaries.
vc.rewardProgramsDic = rewardProgramsDic
}
}
вопрос я получаю, когда собственность была установлена в destination
viewController
, когда я нажмите back
и распечатать значения в rewardProgramsDic
значения изменились бы. Я попытался установить breakpoints
на rewardProgramsDic
, а также с помощью didSet
, чтобы попытаться поймать изменение, но ни один из них не вызван, когда свойство обновляется в destination
viewController
.
Edit 2:
В происходящей viewController
:
var rewardProgramsDic: [String: IndividualRewardProgram] = [:]
В пункте назначения tableViewController
var rewardProgramsDic: [String: IndividualRewardProgram] = [:]
Потому что все ключи указывают на тот же экземпляр testObj. Сравните с этим http://stackoverflow.com/q/41343905/6433023 –
вам нужно скопировать экземпляр, чтобы назначить его myDic – GeneCode
Спасибо вам обоим. Это определенно помогло. Один вопрос о ключах, указывающих на экземпляры 'testObj'.Если бы я должен был передать этот «словарь» в 'segue', значит, экземпляр' '' '' '' '' '' '' viewController 'этого '' словаря' 'также указывает в память на одно и то же место? Я., изменение в '' '' '' '' '' '' '' '' '' '' '' '' ''' '' '' '' изменило бы этот' словарь', если бы я должен был нажать кнопку 'назад'? – Sami