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的值保持不变?
发布于 2018-06-03 13:50:55
是!实际上,我的问题似乎是扭曲和无意义的,抱歉:(我在特定情况下弄得很混乱(这不是那种情况:) )您必须为自己的数据类型实现写入时复制功能,例如,当结构包含可变引用,但仍应保留值语义时
也许下面的代码可以解释我想做什么(尽管没有意义:) )谢谢你的回答;)
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 // 3https://stackoverflow.com/questions/50658906
复制相似问题