Swift中使用結(jié)構(gòu)體

事情發(fā)生在我需要給一個(gè)數(shù)組中符合條件的model某個(gè)屬性重新賦值時(shí)。
下面是示例的代碼。

struct TestStruct {
    var str: String = ""
}

var arr1: [TestStruct] = []
var arr2: [TestStruct] = []

for _ in 0..<5 {
    let s1 = TestStruct(str: "One")
    let s2 = TestStruct(str: "Two")
    
    arr1.append(s1)
    arr2.append(s2)
}


for s1 in arr1 {
    for var s2 in arr2 {
        s2.str = s1.str
    }
}

// 預(yù)期是 arr2 中的所有TestStruct的str屬性值變?yōu)?One
for s in arr2 {
    print(s.str)  // 實(shí)際結(jié)果  Two Two Two Two Two
}

這樣寫之后,發(fā)現(xiàn)arr2中的值并沒(méi)有如我們想象的一樣。

在Swift中,結(jié)構(gòu)體屬于數(shù)值類型,不同于類的引用。

類,在每次賦值時(shí),只是增加了對(duì)它的引用;
結(jié)構(gòu)體,在發(fā)生賦值時(shí)都是復(fù)制了一個(gè)新的結(jié)構(gòu)體對(duì)象。

所以我們對(duì)上面的代碼做一些修改:

/**
 * for s1 in arr1 {
 *    for var s2 in arr2 {
 *        s2.str = s1.str // 這里將arr2 的 TestStruct取出賦值給 s2, 實(shí)際會(huì)重新復(fù)制一個(gè)出來(lái),s2 并不是 arr2 內(nèi)存儲(chǔ)的那個(gè)結(jié)構(gòu)體。
 *    }
 * }
*/

for s1 in arr1 {
    for index in 0..<arr2.count {
        arr2[index].str = s1.str // 這里直接使用下標(biāo)取出arr2中的TestStruct。
    }
}

for s in arr2 {
    print(s.str)  // One One One One One
}

這樣我們就完成了賦值啦。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,022評(píng)論 4 61
  • 你有怎樣的故事,來(lái)聽(tīng)聽(tīng)別人的故事吧!有一個(gè)女孩她的名字瞳媣“她讀六年級(jí)的時(shí)候她們班剛好轉(zhuǎn)來(lái)一個(gè)女同學(xué)名字叫小婷”學(xué)...
    瞳媣閱讀 347評(píng)論 0 1
  • 湖的聯(lián)想 作者:飄聆 世人向往的人間仙境 波光忽閃忽閃的 倒映著千年的樹影 世間萬(wàn)物化為海市 匯集人類的足跡 休憩...
    飄聆閱讀 390評(píng)論 0 0
  • “這次是真的分手了。不!是她悔婚!我是被她拋棄的那個(gè)人……” 大二那年,他們?cè)诖髮W(xué)相遇,她被他的才華吸引,而他也覺(jué)...
    圍魏救趙閱讀 136評(píng)論 0 0
  • 我看到我送出的一把把匕首 因?yàn)槲覑?ài)你 它們刀刀致命 因?yàn)槲覑?ài)你 它們蓄謀多時(shí) 你飛濺出的血霧里 有一半是我的 在天...
    千秋_閱讀 338評(píng)論 3 6

友情鏈接更多精彩內(nèi)容