1

I'm implementing singleton pattern in Swift. I came to a point I need to inherit the singleton class.

I found a hint using this: [[[self class] alloc] init]

How to translate that in Swift?

I want to create something:

class var sharedInstance : MyClass //instanceType
{
    struct Static {                    // something like this
        static let instance: MyClass =  [[[self class] alloc] init]
    }

    return Static.instance
}

Thanks.

Grimxn
  • 22,115
  • 10
  • 72
  • 85
Allan Macatingrao
  • 2,071
  • 1
  • 20
  • 28

5 Answers5

0

No need to use [[[self class] alloc] init]. You can do like this:

MyClass.swift

import Foundation
import UIKit

let sharedInstance = MyClass()

class MyClass: NSObject {
     func sayHello(){
         println("Hello Nurdin!")
     }
}

ViewController.swift

/* Code everywhere.. */

sharedInstance.sayHello() //Hello Nurdin! appeared in console.

/* Code everywhere.. */
Nurdin
  • 23,382
  • 43
  • 130
  • 308
0

for example ( use self.init() )

class A {
    var defaultPort: Int
    required init() {
        self.defaultPort = 404
    }
    class var shareInstance: A {
        struct Static {
            static var onceToken: dispatch_once_t = 0
            static var instance: A? = nil
        }
        dispatch_once(&Static.onceToken) {
            Static.instance = self.init()
        }
        return Static.instance!
    }
}
EvGeniy Ilyin
  • 1,817
  • 1
  • 21
  • 38
0
class Base {

}

class A : Base {
    static let _a = Base.init()
    class var sharedInstance: Base {
        return _a
    }
}

let a = A.sharedInstance
let b = A.sharedInstance
a === b
user3441734
  • 16,722
  • 2
  • 40
  • 59
0

Singleton means that you cannot have more then one instance of this class. So constructor should be private.

class YourClassName {

  static let sharedInstance: YourClassName = YourClassName()

  private override init() {}
}
Petr Lazarev
  • 3,102
  • 1
  • 21
  • 20
-1

Here is my code for singleton Inheritance in swift.It seems work in my project...

class BaseObject {
    required init(){
    }
    class func shareInstance() ->BaseObject{
        let classname = NSStringFromClass(self)
        if((dic[classname]) != nil) {
            return (dic[classname])!
        }
        else {
            var singletonObject = self()
            dic[classname] = singletonObject
            return singletonObject
        }
    }
}
var dic = [String: BaseObject]()
shadox
  • 997
  • 1
  • 8
  • 18
  • Not only a BaseClass became context dependent, but you introduced a `dic` **global** variable. Though, static variables are actually global ones, but it is still not a good idea to make a class dependent on some outer variable with not-so-clear reason to exist. – Nikita Hismatov Aug 06 '19 at 19:49