私はデータクラスとして実行する必要がある私のアプリで2つのクラスを書いた。 1つはユーザーの詳細用で、もう1つは製品用です。 両方のクラスは、名前と変数が異なる同じコードです。 製品クラスは正常に動作しますが、ユーザークラスはsharedInstanceを作成しません。 JsonはデータをOKにして印刷することができます。ここ1つのswift 2アプリケーションでシングルトンのカップル
は私のコードです:
import UIKit
import Alamofire
import SwiftyJSON
class userDetailsDataClass {
let defaults = NSUserDefaults.standardUserDefaults()
var user: [SwiftyJSON.JSON] = []
init() {
let baseUrlString = "http://example.com/ios/login.php?"
let parameters = [String:String]()
let urlSignup = baseUrlString + "id=" + defaults.stringForKey("userID")! + "&macnumber=" + defaults.stringForKey("currentUUID")!
//Encode url to solve spaces issues
let urlwithPercentEscapes = urlSignup.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!
print(urlwithPercentEscapes)
Alamofire.request(.GET, urlwithPercentEscapes, parameters: parameters).responseJSON { response in
if response.result.isSuccess {
let json = JSON(response.result.value!)
let data = json.arrayValue
print(json)
if json["error"] == "wrongmac" {
print("wrong mac")
} else {
let macFromDb = json["macnumber"]
self.defaults.setValue(String(macFromDb), forKey: "macFromDb")
userDetailsDataClass.sharedInstance.user = data
print(String(userDetailsDataClass.sharedInstance.user.count)+"user count from alamo ")
}
}
let nc = NSNotificationCenter.defaultCenter()
nc.postNotificationName("userDataReadyForSplash", object: nil)
}
}
//Create one class for shared Instance
struct Static {
static var onceToken : dispatch_once_t = 0
static var instance : userDetailsDataClass? = nil
}
class var sharedInstance : userDetailsDataClass {
dispatch_once(&Static.onceToken){
Static.instance = userDetailsDataClass()
}
return Static.instance!
}
}
できるだけシングルトンを使用しないでください。あなたができない場合は、以下のようにそれらを実際のシングルトンにしてください:http://stackoverflow.com/a/36012158/2227743 – Moritz