gpt4 book ai didi

ios - 在 Swift 中创建单例

转载 作者:搜寻专家 更新时间:2023-11-01 05:51:34 25 4
gpt4 key购买 nike

我已经成功地在 Swift 中创建了一个单例对象,但我觉得实现起来相当冗长。有没有办法缩短这段代码?并将多个格式化程序组合成一个类,其中每个格式化程序都是它自己的单例?

import Foundation

class sharedNumberFormatterWithOneDecimalPlace : NSNumberFormatter {
class var sharedInstance: sharedNumberFormatterWithOneDecimalPlace {
struct Singleton {
static let instance = sharedNumberFormatterWithOneDecimalPlace()
}
return Singleton.instance
}

override init () {
super.init()
self.minimumIntegerDigits = 1
self.maximumFractionDigits = 1
self.minimumFractionDigits = 1
}

required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}

在我的其他类(class)中,我可以通过以下方式调用它:

NSNumberFormatter *formatter = sharedNumberFormatterWithOneDecimalPlace.sharedInstance;
NSLog(@"%@", [formatter stringFromNumber:aNumber]);

我希望能够拥有 1 类“MultipleFormatters”,我在其中设置了许多在各处使用的格式化程序,然后调用诸如“MultipleFormatters.OneDecimalPlace”之类的东西。附言。我已经阅读了帖子:Using a dispatch_once singleton model in Swift
谢谢。

最佳答案

我认为最好的方法是:

private let _MultipleFormattersSharedInstance = MultipleFormatters()

class MultipleFormatters {
class var sharedInstance: MultipleFormatters {
return _MultipleFormattersSharedInstance
}
}

你可以使用

MultipleFormatters.sharedInstance

然后您可以创建您需要的所有“格式化程序”作为类 MultipleFormatters 中的方法,并在所有地方调用它们。

感谢that thing in swift

编辑例如:

假设您想要一个名为“increment”的格式化程序。我不知道你所说的格式化程序是什么意思,但这是一个愚蠢的例子。

private let _MultipleFormattersSharedInstance = MultipleFormatters()

class MultipleFormatters {
class var sharedInstance: MultipleFormatters {
return _MultipleFormattersSharedInstance
}

func increment(number: Int, amount: Int) -> Int{
//Maybe you need something that was initialized with
//the singleton here.
return number + amount
}
}

你会用

let singleton : MultipleFormatters = MultipleFormatters.sharedInstance
let result = singleton.increment(1, amount: 25)

关于ios - 在 Swift 中创建单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25528190/

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