我正在Swift中创建一个单例类,如下所示:
class SingletonClass {
class var sharedInstance: SingletonClass {
struct Singleton {
static let instance = SingletonClass()
}
return Singleton.instance
}
var a: Int?
var b: Int?
var c: Int?
}
Run Code Online (Sandbox Code Playgroud)
这允许我从任何地方访问共享实例:
SingletonClass.sharedInstance
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但它并不能使这个实例成为整个系统中唯一可能的实例,这就是单身人士所关注的.
这意味着我仍然可以创建一个全新的实例,例如:
let DifferentInstance: SingletonClass = SingletonClass()
Run Code Online (Sandbox Code Playgroud)
并且共享实例不再是唯一的实例.
所以我的问题是:在Swift中有没有办法创建一个真正的单例类,其中只有一个实例可以在系统范围内进行?
我有一个功能,当按下按钮时我想调用它,但不像我迄今为止所做的任何事情,我希望能够从几个ViewControllers中的任何一个到达它.我不想在每个ViewController中复制相同的代码块.
我已经尝试定义我想在ViewController类之外调用的函数,但我无法弄清楚我需要设置目标才能达到它.通常self使用是因为函数是在类中定义的,但是如果函数在另一个文件中和/或类之外,你会怎么做?
button.addTarget(???, action: "myFunction:", forControlEvents: UIControlEvents.TouchUpInside)
Run Code Online (Sandbox Code Playgroud)
编辑:我能够使用的另一个解决方案是做这样的事情并定义我想在创建按钮的函数内调用的函数,但我遇到了同样的问题,不知道target需要达到什么它.
class ViewController {
// Main code here
}
func makeButton() {
// Code to make button here
button.addTarget(???, action: "buttonPressed",...)
func buttonPressed() {
// Code that runs when the button is pressed goes here
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我需要在swift中创建一个单例类.任何人都可以帮我代码吗?我已经知道单例类在创建通用代码时非常有用.
我已经成功地在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")
}
}
Run Code Online (Sandbox Code Playgroud)
在我的其他课程中,我可以称之为:
NSNumberFormatter *formatter = sharedNumberFormatterWithOneDecimalPlace.sharedInstance;
NSLog(@"%@", [formatter stringFromNumber:aNumber]);
Run Code Online (Sandbox Code Playgroud)
我希望能够有一类"MultipleFormatters",我设置了许多格式化程序,可以在各处使用,然后调用像"MultipleFormatters.OneDecimalPlace"之类的东西.PS.我已经阅读过帖子:在Swift中使用dispatch_once单例模型
谢谢.
我有Swift 2.0的这个实现,Xcode建议不仅令人困惑,而且还会导致编译错误.它是一个用户传递callfunc闭包的库.
之前
protocol MyProtocol {
}
Run Code Online (Sandbox Code Playgroud)
主要课程
private static var t: dispatch_once_t = 0
private static var singleton: MyProtocol?
public class func getSingleton(callfunc: () -> MyProtocol) -> MyProtocol {
dispatch_once(&self.t) {
self.singleton = callfunc()
}
return singleton!
}
Run Code Online (Sandbox Code Playgroud)
后
private static var __once: () = {
MyProtocol.singleton = callfunc()
}()
open class func getSingleton(_ callfunc: () -> MyProtocol) -> MyProtocol {
singleton = MyProtocol.__once()
return singleton!
}
Run Code Online (Sandbox Code Playgroud)
我基本上需要将参数传递给__once函数.
用户:
class Test: MyProtocol {
}
Main.getSingleton({Test()});
Run Code Online (Sandbox Code Playgroud)
我需要将以下Objective-C代码转换为Swift.
static RWBasicCell *sizingCell = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sizingCell = [self.tableView dequeueReusableCellWithIdentifier:@"CellIdentifier"];
});
Run Code Online (Sandbox Code Playgroud)
我怎么做?我用Google搜索并找到了这个例子.
class SingletonC {
class var sharedInstance : SingletonC {
struct Static {
static var onceToken : dispatch_once_t = 0
static var instance : SingletonC? = nil
}
dispatch_once(&Static.onceToken) {
Static.instance = SingletonC()
}
return Static.instance!
}
}
Run Code Online (Sandbox Code Playgroud)
但这是为了返回一个班级.
我在objective-c中编写了一个类来为我提供一个名为helper的类的实例,它可以帮助我做很多不同的事情.
static Helper *objHelper = nil;
@implementation Helper
- (id)init {
self = [super init] ;
return self;
}
///- Return Helper Singleton Instance
+ (Helper *) getHelperInstance;
{
@synchronized (objHelper) {
if ( !objHelper || objHelper == NULL ) {
objHelper = [[Helper alloc] init];
}
return objHelper;
}
}
Run Code Online (Sandbox Code Playgroud)
我试过快速写它,但我不认为我做对了:
var objHelper : Helper?
override init() {
super.init()
}
func getHelperInstance() ->Helper{
synchronizd(objHelper == nil) {
if objHelper == nil {
objHelper = Helper()
}
}
return objHelper! …Run Code Online (Sandbox Code Playgroud) 我正在研究RealmSwift,它是Swift中CoreData/SQLite的现代数据库替代品.
我想知道如何实现一个Class可以管理/处理RealmSwift框架的所有查询的设计
这个问题有点类似于实现SQLite Model Manager,但对于RealmSwift.
具体来说,我不需要上面提到的单例对象/实例.
已经试过这些:
'dispatch_once_t'在Swift中不可用:改为使用延迟初始化的全局变量
class var sharedInstance:Model{
struct Static{
static var instance:Model?
static var token: dispatch_once_t = 0
}
dispatch_once(&Static.token){
Static.instance = Model()
}
return Static.instance!
}
Run Code Online (Sandbox Code Playgroud)
请建议我dispatch_once_t的替代方法..我不知道swift,我代码C/C++/Obj.C,请给我快速代码修复上面的问题