我在我的应用程序中编写了一个需要作为数据类执行的2个类。一个用于用户详细信息,一个用于产品。 这两个类都是具有不同名称和变量的相同代码。 产品类工作正常但用户类不能为我创建sharedInstance。 Json得到的数据还可以打印出来。
这是我的代码:
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!
}
}
答案 0 :(得分:0)
Singleton应该直接在类中定义而不是作为子类定义(并且请为类Name中的第一个字符添加一个大写字母):
class UserDetailsDataClass {
static let sharedInstance = 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
// ADDITION: Try to print the whole SwiftyJSON array and see the result
print(UserDetailsDataClass.sharedInstance.user)
print(String(userDetailsDataClass.sharedInstance.user.count)+"user count from alamo ")
}
}
let nc = NSNotificationCenter.defaultCenter()
nc.postNotificationName("userDataReadyForSplash", object: nil)
}
}
}