2014-11-03 2 views
11

AppDelegate의 변수를 프로젝트의 전역 변수를 포함하도록 만든 다른 클래스로 전달해야하며 작동하도록하는 방법을 찾을 수 없습니다.Swift appDelegate에서 다른 클래스로 데이터 전달

func application(application: UIApplication!, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData!) { 
    println("Device's token is: \(deviceToken)") 

    //Global Variables Class Instance 
    let globals:Globals = Globals() 

    globals.setDeviceToken("test1") //method1 not working 
    globals.deviceToken = "test2" //method2 not working 
} 

이 내 전역 클래스입니다 :

은 AppDelegate에있는 코드 내가 프로젝트의 다른 파일에서 값을 인쇄하려고하면

public class Globals { 
    var deviceToken = String() 

    init() { 
     //nothing 
    } 

    func setDeviceToken(s:String){ 
     deviceToken = s 
    } 

    func getDeviceToken() -> String { 
     return deviceToken 
    } 
} 

, 난 아무것도 얻을 수 없으며 단지 빈 문자열입니다.

class ViewController: UIViewController { 

    //Global Variables Class Instance 
    let globals:Globals = Globals() 

    override func viewDidLoad() { 
     println(globals.getDeviceToken()) //return empty string 
     println(globals.deviceToken)  //return empty string 

*** UPDATE : 대단히 감사합니다 : 내 질문을 부결 사람들에게 . 죄송합니다. 스위프트 (아직) 전문가가 아니고 미안 해요. stackoverflow를 사용하여 모르는 내용을 묻는다면 죄송합니다. 싱글로

let delegate = UIApplication.sharedApplication().delegate as AppDelegate 
let deviceToken = delegate.deviceToken 
  • 봐 :

  • +0

    앱 대리인에 보유 할 데이터의 양은 얼마입니까? 없음! 이제까지! 하지 마. 그것은 애플 리케이션 위임을위한 것이 아닙니다. – Fogmeister

    +6

    화를 낼 필요가 없습니다. 저는 초보자이며 배우려고합니다. @ Fogmeister – MeV

    답변

    14

    당신이 당신은 UIApplication을 통해 AppDelegate에 액세스 할 수

    1. 를 원하는 것을 달성하기 위해 사용할 수있는 몇 가지 패턴이있다. '스위프트 싱글 톤 (Quickton singleton)'에 대한 빠른 Google 검색으로 긴 여정을 얻을 수 있습니다. 첫 번째 결과 :

      class SingletonB { 
      
           class var sharedInstance : SingletonB { 
           struct Static { 
            static let instance : SingletonB = SingletonB() 
           } 
           return Static.instance 
          } 
      } 
      

    그런 다음 아무 곳이나 싱글 인스턴스를 sharedInstance를 사용하고 동일한 변수를 액세스 할 수 있습니다.

    첫 번째 것은 빠르고 빠지기 때문에 더 심각한 프로젝트의 경우에는 싱글 톤 패턴을 추천합니다.

    아마이 할 수있는 백만 가지 방법이 있습니다, 그러나 이것은 당신이 (싱글 구현하는 몇 가지 방법 탐구 링크에서 더 많은 : https://github.com/hpique/SwiftSingleton)

    을 시작할 수 있어야

    +0

    답장을 보내 주셔서 감사합니다. 나는 싱글 톤을 사용한 적이 없으며 그것에 관한 문서를 읽을 필요가있다. 그러나이 코드는 Globals에 사용했던 코드와 매우 유사합니다[email protected] Bob Vork – MeV

    +0

    싱글 톤은 놀랍습니다 !!!!! 감사!!!!!! @ Bob Vork – MeV

    +0

    Swift 1.2 이상을 사용하는 경우 링크 된 기사에 설명되어 있듯이 위의 다소 복잡하여 싱글 톤을 만드는 방법은 필요하지 않습니다. – RenniePet

    6

    단순히 내 문제 해결을 사용 NSUserDefaults

    AppDelegate에의

    :

    NSUserDefaults.standardUserDefaults().setObject(deviceToken, forKey: "deviceToken") 
    NSUserDefaults.standardUserDefaults().synchronize() 
    

    다른 클래스에서 :

    NSUserDefaults.standardUserDefaults().objectForKey("deviceToken") 
    

    솔직히이 그것을 할 수있는 좋은 방법입니다 나도 몰라하지만

    이 *** UPDATE 일하고 : 내 질문을 부결 사람들을 위해 : 대단히 감사합니다. 죄송합니다. 스위프트 (아직) 전문가가 아니고 미안 해요. stackoverflow를 사용하여 모르는 내용을 묻는다면 죄송합니다.

    +0

    안녕하세요! NSUserDefaults를 사용하는 것이 왜 권장되지 않는지 알고 싶습니다. – mattyU

    +0

    mattyU 여기 @Fogmeister에게 물어볼 필요가있어, 내 질문에 댓글을 달았 기 때문이다. – MeV