Xcode;尝试存储在结构中时获取 "Instance member 'string' cannot be used on type 'VC'"

Xcode; Getting "Instance member 'string' cannot be used on type 'VC'" when trying to store in struct

我正在使用 Xcode 和 Swift 开发一个 iOS 应用程序。

我想用NSUserDefaults存储数据。

但是我得到了结构的 Instance member 'firstString' cannot be used on type 'VC'Instance member 'secondString' cannot be used on type 'VC'

这是我的代码:

import UIKit

class Register: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var firstString: UITextField!
    @IBOutlet weak var secondString: UITextField!

    struct storeLogin {
        static let storeFirstString = (firstString.text)
        static let storeSecondString = (secondString.text)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

我做错了什么?

在您的情况下,您将需要一个函数体来将属性值设置为另一个 属性(将 UITextFields 值保存为 let)及其原因是因为 - 属性仅在 class 为 运行 或以随机顺序执行时才开始自行初始化,这意味着在初始化 struct 属性时,可能存在这样一种可能的情况,即结构在您的文本字段初始化之前就已经初始化了。所以你需要把这段代码放在你初始化一个 属性 的地方,以将它们保存到另一个 属性.

struct storeData {
    let saveFirstString : String?
    let saveSecondString : String?
  } 

每次你想存储数据时,只需附加到 storeData

类型的数组即可
class myclass: ...{

    struct storeData {
    let saveFirstString : String?
    let saveSecondString : String?
  } 

    var myData = [stroeData]()//Define this variable globally

     //Check if your textfield is updated or whenevea you want to store to NSUserDefaults 


     func loginBtn(){

       myData.append(storeData.init(saveFirstString: "dasda", saveSecondString: "dasda")
       //Call this line of code whenever you want to store the values in your NSUserDefaults 
      }
 } 

我终于找到了解决办法。我正在使用以下代码在 NSUserDefaults 中存储 TextFields 内容:

let loginData = NSUserDefaults.standardUserDefaults()

loginData.setValue(self.username.text, forKey: "Username")
loginData.setValue(self.password.text, forKey: "Password")

我正在使用此代码从 NSUserDefaults 获取数据:

let retrieveData = NSUserDefaults.standardUserDefaults()

if let username = retrieveData.stringForKey("Username"){
print(username)
}
if let password = retrieveData.stringForKey("Password"){
print(password)
}