我有这个类Signin
,当用户使用用户名,密码登录时会初始化它,但它也会获取并设置uname,密码到密钥链。我将在代码中的其他地方使用此Signin类,但我不希望每次都创建一个新实例,但是当用户第一次登录时,应该初始化然后在整个应用程序中,同一个实例应该是除非用户决定退出,否则使用。
我在AppDelegate中声明并创建了这个类的实例,我的登录代码是。
var signin: SignIn?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
signin = SignIn(username: fullName!, password: "")
}
以下是我班级的样子:
class SignIn {
let username: String
let password: String
let keychain = KeychainSwift()
init(username: String, password: String) {
self.username = username
self.password = password
}
func getUsername() -> String {
if (keychain.get("username") != nil) {
return keychain.get("username")!
}
return ""
}
func setUsername(username: String) {
keychain.set(username, forKey: "username")
}
func getPassword() -> String {
if (keychain.get("password") != nil) {
return keychain.get("password")!
}
return ""
}
func setPassword(password: String) {
keychain.set(password, forKey: "password")
}
}
但是当我尝试访问它时,可以在ViewController中说“欢迎用户名”。我做这样的事情:
class ViewController: UIViewController {
@IBOutlet weak var welcomeText: UITextField!
var signIn: SignIn?
override func viewDidLoad() {
let username: String = signIn!.getUsername()
welcomeText.text = "Welcome \(username)"
}
}
这是正确的方法吗?我如何以这样的方式创建类,以便获得Signin类的共享实例,并且相同的实例在任何地方共享,并且在注销时,我取消初始化类。
答案 0 :(得分:1)
您可以使用单身模式,如下所示:
class SignIn {
static let sharedInstance = SignIn()
// your code
}
在此之后,您可以使用
访问sharedInstanceSignIn.sharedInstance
来自代码中的任何地方的
答案 1 :(得分:0)
尝试这样的事情:
class SignIn {
let username: String
let password: String
static let sharedInstance = SignIn()
let keychain = KeychainSwift()
// Initialization
private init() {
self.username = keychain.get("username")!
self.password = keychain.get("password")!
}
}
登录成功后,您必须在钥匙串中设置用户名和密码并致电SignIn.sharedInstance
,然后您可以随时随地访问用户名和密码,如下所示:
let signIn = SignIn.sharedInstance
print("Username ="+signIn.username)
print("Password ="+signIn.password)
希望它有所帮助。
答案 2 :(得分:-1)
class User {
static let sharedInstance = User()
var name :String?
var phoneNumber : String?
func initializer(_ nm : String , ph : String){
name = nm
phoneNumber = ph
}
}
使用
初始化它User.sharedInstance.initializer("Jen", ph: "2323")