2014-11-26 4 views
0

스위프트에서 싱글 톤 패턴을 구현 중입니다. 나는 싱글 톤 클래스를 상속 받아야 할 시점에왔다. [[[self class] alloc] init]스위프트 : 싱글 톤 상속

어떻게 스위프트에 그 번역 :

나는이를 사용하여 힌트를 발견?

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

    return Static.instance 
} 

감사 :

내가 뭔가를 만들려고합니다.

+0

중복 된 http://stackoverflow.com/a/24147830/2035473 – erdekhayser

답변

0

여기

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]() 
0

... swift.It에서 단독 상속에 대한 내 코드 내 프로젝트에서 작업을 보인다 [[[self class] alloc] init]를 사용 할 필요가 없습니다. 당신은 다음과 같이 수행 할 수 있습니다

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.. */ 
0

예를 들어 (사용 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! 
    } 
} 
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 
0

싱글 톤은이 클래스의 인스턴스를 두 개 이상 가질 수 없음을 의미합니다. 따라서 생성자는 개인이어야합니다.

class YourClassName { 

    static let sharedInstance: YourClassName = YourClassName() 

    private override init() {} 
} 
관련 문제