gpt4 book ai didi

swift - 你能在 Swift 中同时定义和实例化隐式类型吗?

转载 作者:行者123 更新时间:2023-11-28 06:02:13 25 4
gpt4 key购买 nike

只是想着我想如何构建一些 UserDefaults 的语言,这些 UserDefaults 可以根据层次结构自动生成键。这让我想知道...是否可以像这样同时定义和实例化一个类型?

let myUserSettings = {

let formatting = {

var lastUsedFormat:String

}
}

let lastUsedFormat = myUserSettings.formatting.lastUsedFormat

Note: I can't use statics because I specifically need instancing so nested structs/classes with static members will not work for my case.

这是我能想到的最接近的东西,但我讨厌必须创建初始化程序来设置成员。我希望有一些不那么冗长的内容。

class DefaultsScope {

init(_ userDefaults:UserDefaults){
self.userDefaults = userDefaults
}

let userDefaults:UserDefaults

func keyForSelf(property:String = #function) -> String {
return "\(String(reflecting: self)).\(property)"
}
}

let sharedDefaults = SharedDefaults(UserDefaults(suiteName: "A")!)
class SharedDefaults : DefaultsScope {

override init(_ userDefaults:UserDefaults){
formatting = Formatting(userDefaults)
misc = Misc(userDefaults)
super.init(userDefaults)
}

let formatting:Formatting
class Formatting:DefaultsScope {

let maxLastUsedFormats = 5

fileprivate(set) var lastUsedFormats:[String]{
get { return userDefaults.stringArray(forKey:keyForSelf()) ?? [] }
set { userDefaults.set(newValue, forKey:keyForSelf()) }
}

func appendFormat(_ format:String) -> [String] {

var updatedListOfFormats = Array<String>(lastUsedFormats.suffix(maxLastUsedFormats - 1))
updatedListOfFormats.append(format)
lastUsedFormats = updatedListOfFormats

return updatedListOfFormats
}
}

let misc:Misc
class Misc:DefaultsScope {

var someBool:Bool{
get { return userDefaults.bool(forKey:keyForSelf()) }
set { userDefaults.set(newValue, forKey:keyForSelf()) }
}
}
}

那么有没有更简单的方法呢?

最佳答案

免责声明:这可能只是一个不应该在现实生活中使用的抽象解决方案:)

enum x {
enum y {
static func success() {
print("Success")
}
}
}
x.y.success()

更新:对不起,伙计们,我无法停止试验。这个看起来很糟糕:)

let x2= [
"y2": [
"success": {
print("Success")
}
]
]
x2["y2"]?["success"]?()

更新 2:再次尝试,这次使用元组。由于元组必须至少有两个值,所以我不得不在其中添加一些虚拟对象。此外,元组不能具有变异函数。

let x3 = (
y3: (
success: {
print("Success")
},
failure: {
print("Failure")
}
),
z3: 0
)
x3.y3.success()

关于swift - 你能在 Swift 中同时定义和实例化隐式类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49288345/

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