【问题标题】:iOS: create a struct in swift with credentialsiOS:使用凭据快速创建结构
【发布时间】:2016-07-10 08:52:43
【问题描述】:

我必须创建一个struct 来检查两个 UITextField 是否有效。 我的想法是这样的,它是创建结构的好方法吗?

struct Credentials{
func isCorrect() -> Bool {
    guard let username = emailTF.text else {
        return false
    }
    guard let password = passwordTF.text else {
        return false
    }

    return true
}

但我有一个问题:

  • 如何在结构中传递emailTextFieldpasswordTF 的值?使用 init 方法?
  • 在结构中包含一些 var 或 let 更好,还是在结构中仅包含一个方法也是一个好主意?

谢谢

【问题讨论】:

  • 旁注:guard 的一个好处是能够级联可选绑定guard let username = emailTF.text, password = passwordTF.text else { ...

标签: ios swift struct ios9


【解决方案1】:

你可以创建这样的结构

struct Credentials {
    let email: String
    let password: String

    init?(email:String?, password: String?) {
        guard let email = email, password = password else { return  nil }
        self.email = email
        self.password = password
    }

    var correct: Bool {
        // do your check
        guard email.isEmpty == false && password.isEmpty == false else { return false }
        return true
    }
}

如您所见,correct 是一个计算属性,不是函数,因为它不需要任何参数。

用法

let correct = Credentials(email: emailTF.text, password: passwordTF.text)?.correct == true

【讨论】:

    【解决方案2】:

    结构与类的工作方式大致相同。它们可以有变量,并且如果有没有明确给定值的变量,则它们与类不同,swift 将自动创建一个初始化程序。你会做这样的事情。

    let myStruct = Credentials(emailTF: "something", passwordTF: "something")
    print(myStruct.isCorrect())
    

    该函数会像类一样使用 let 和 var。

    但是,说了这么多,我建议将这个函数直接放入您的类中,而不是放入结构中。只需将值作为参数传入即可。

    【讨论】:

      猜你喜欢
      • 2015-08-12
      • 2018-07-29
      • 2015-08-25
      • 2018-04-15
      • 1970-01-01
      • 2014-06-23
      • 1970-01-01
      • 2020-08-31
      • 2015-01-25
      相关资源
      最近更新 更多