gpt4 book ai didi

swift - 在初始化期间使用覆盖的静态属性

转载 作者:行者123 更新时间:2023-11-28 14:10:05 24 4
gpt4 key购买 nike

我想创建一个具有子类可以覆盖的静态属性的类,该类将用于初始化实例。到目前为止,我已经尝试这样做:

import Cocoa

class A: NSObject {
class var staticProperty: String {
return "A"
}

var property: String = A.staticProperty
}

class B: A {
override class var staticProperty: String {
return "B"
}
}

这不起作用,因为 B().property 仍然返回 "A"。我如何更改此代码,以便 property 包含子类指定的值?任何帮助将不胜感激!

编辑我想用 staticProperty 的值初始化 property,所以它也可以是这样的:

var property: SomeClass = SomeClass(A.staticProperty)

但是,此初始化仍应使用 "A" 表示 A 类,使用 "B" 表示 B 类。

编辑 2(在@RakeshaShastri 的评论之后)对于我的特定用例,我需要 property 被存储(因此不被计算)并且是非惰性的。

编辑 3简而言之,我正在尝试构建一个 Realm 模型类,它与其他模型有一些对多的关系。对于这些模型(非常相似),我正在尝试创建一个包含共享功能的父类(super class),其中也是反向关系。因此,我想要一个包含第一个模型中的键的静态属性到其他模型中的任何一个,然后使用这个键名初始化一个 LinkingObjects 属性。由于 Realm 不允许延迟或计算,我不能在这里使用这些功能。

最佳答案

如果你继承自 NSObject 为什么不使用它?

import Cocoa

class A: NSObject {
var property: String
public override init() {
let str = type(of: self).perform(#selector(getter: type(of: self).staticProperty))?.takeUnretainedValue() as! String
property = str

}

@objc class var staticProperty: String {
return "A"
}

}

class B: A {
override class var staticProperty: String {
return "B"
}
}

playground output

关于swift - 在初始化期间使用覆盖的静态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52670640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com