首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么类型属性在copyOnWrite期间没有更新

为什么类型属性在copyOnWrite期间没有更新
EN

Stack Overflow用户
提问于 2018-06-03 00:25:26
回答 1查看 39关注 0票数 -2
代码语言:javascript
复制
struct Card: CustomStringConvertible {
    var identity:Int

    var description: String {
        return "card:\(identity)"
    }

    static var numberOfCards = 0

    init(identity:Int) {
        Card.numberOfCards += 1
        self.identity = identity
    }
}

var cards = [Card]()

let cardOne = Card(identity: 1)
var cardTwo = cardOne //card:1
Card.numberOfCards // 1
cardTwo.identity = 2 // card:2
Card.numberOfCards // 1

使用copy-on-write时,不会创建新的对象,直到我们改变复制的对象。为什么我修改了cardTwo属性的值后,numberOfCard的值保持不变?

EN

回答 1

Stack Overflow用户

发布于 2018-06-03 13:50:55

是!实际上,我的问题似乎是扭曲和无意义的,抱歉:(我在特定情况下弄得很混乱(这不是那种情况:) )您必须为自己的数据类型实现写入时复制功能,例如,当结构包含可变引用,但仍应保留值语义时

也许下面的代码可以解释我想做什么(尽管没有意义:) )谢谢你的回答;)

代码语言:javascript
复制
    class Identifier {

        static var instanceNumbers = 0

        var identity:Int

        init(identity:Int) {
            Identifier.instanceNumbers += 1
            self.identity = identity
        }
    }

    struct Card: CustomStringConvertible {

        private var _id:Identifier

        var id:Identifier {
            mutating get {
                if !isKnownUniquelyReferenced(&_id){
                    let identity = _id.identity
                    _id = Identifier(identity: identity)
                }
                return _id
            }
        }

        init(id:Identifier){
            self._id = id
        }

        var description: String {
            return "card:\(_id.identity)"
        }
    }

    let cardOne = Card(id: Identifier(identity: 1))
    let cardTwo = Card(id: Identifier(identity: 2))
    Identifier.instanceNumbers // 2
    var cardThree = cardTwo
    Identifier.instanceNumbers // 2
    cardThree.id.identity = 3
    Identifier.instanceNumbers // 3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50658906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档