我有两个具有一对一关系的CoreData实体。我想基于此实体创建结构。 我的代码:
struct DetailedPin {
var pin: Pin?
}
struct Pin {
var detailedPin: DetailedPin?
}
但我收到一个错误:Value type 'DetailedPin' cannot have a stored property that references itself
。和Pin
结构相同的错误。我该如何处理?谢谢。
问题在于,一个inline Optional
存储其Wrapped
值(有关此信息,请参见Mike
Ash的精彩博客文章
)–意味着一个Optional
实例(无论是否nil
存在)将至少占用与所需类型相同的内存量存储在它的.some
大小写(Wrapped
类型)中。
因此,由于您的Pin
结构具有type属性DetailedPin?
,并且type
DetailedPin
属性,Pin?
因此需要无限存储才能内联存储这些值。
因此,解决方案只是添加一个间接层。一种这样做的方法是按照@dfri的建议进行make
Pin
和/或DetailedPin
引用类型(即aclass
)。
但是,如果您希望保留Pin
and 的值语义DetailedPin
,则一种选择是创建一个由类实例支持的包装器类型,以提供必要的间接寻址:
/// Provides indirection for a given instance.
/// For value types, value semantics are preserved.
struct Indirect<T> {
// Class wrapper to provide the actual indirection.
private final class Wrapper {
var value: T
init(_ value: T) {
self.value = value
}
}
private var wrapper: Wrapper
init(_ value: T) {
wrapper = Wrapper(value)
}
var value: T {
get {
return wrapper.value
}
set {
// Upon mutation of value, if the wrapper class instance is unique,
// mutate the underlying value directly.
// Otherwise, create a new instance.
if isKnownUniquelyReferenced(&wrapper) {
wrapper.value = newValue
} else {
wrapper = Wrapper(newValue)
}
}
}
}
现在,您可以只将Indirect
包装器用于您的structs属性中的一个(或两个):
struct DetailedPin {
private var _pin = Indirect<Pin?>(nil)
// Convenience computed property to avoid having to say ".value" everywhere.
var pin: Pin? {
get { return _pin.value }
set { _pin.value = newValue }
}
}
struct Pin {
var detailedPin: DetailedPin?
var foo: String
}
var d = DetailedPin()
var p = Pin(detailedPin: d, foo: "foo")
d.pin = p
// testing that value semantics are preserved...
var d1 = d
d1.pin?.foo = "bar"
print(d.pin?.foo as Any) // Optional("foo")
print(d1.pin?.foo as Any) // Optional("bar")
本文向大家介绍详解C语言中结构体的自引用和相互引用,包括了详解C语言中结构体的自引用和相互引用的使用技巧和注意事项,需要的朋友参考一下 结构体的自引用(self reference),就是在结构体内部,包含指向自身类型结构体的指针。 结构体的相互引用(mutual reference),就是说在多个结构体中,都包含指向其他结构体的指针。 1. 自引用 结构体 1.1 不使用typedef时 错误的
有时候在设计数据结构的时候,可能会遇到两个类需要相互引用的情形。比如类A有类型为B的成员,而类B又有类型为A的成员。 那么这种情形下,两个类的设计上需要注意什么呢? 同一文件 尝试方案 将A和B的定义都放在一个文件中,例如: #include <iostream> class A { public: A() { aa_ = 'A'; } char aa_;
我理解A,我们在那里有一个原语;没有引用。by-复制。 我希望B和C的行为与D相同——根据它们被给予的引用而改变。 为什么这个对象引用另一个对象只对用户定义的对象“起作用”,而不是整数、字符串等。?
PDPage对象是否包含对其所属PDDocument的引用 换句话说,PDPage是否了解其PDDocument<在应用程序的某个地方,我有一个文档列表 这些文档被合并到一个新的PDDocument中: 然后将此PDI文档分成10个包: 我现在的问题是: 如果我循环遍历列表中这些拆分的PDDocuments的页面,是否有办法知道页面最初属于哪个PDDocument? 另外,如果你有一个PDPage
我有两个类,一个被设计用来包含另一个 然而,我不能相互引用类类型(和),只能是其中之一。 我怎样才能在彼此之间引用这两个类类型呢?否则最好的方法是什么?
本文向大家介绍Android总结之WebView与Javascript交互(互相调用),包括了Android总结之WebView与Javascript交互(互相调用)的使用技巧和注意事项,需要的朋友参考一下 前言: 最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App、Web App、Hybrid App三种方式,个人觉得目前以H