Значение типа кортежа ‘()’ не имеет члена ‘param’ [Swift]

#ios #swift

#iOS #swift

Вопрос:

Я хочу передать значение, содержащееся в param в LoginViewController.swift, в NetworkHandler.swift.

Я продолжаю пытаться, но значение не передается, и я получаю сообщение об ошибке. В чем проблема?

Я пробовал это со вчерашнего дня, но все еще не мог найти решение. помощь была бы признательна.

LoginViewController.swift

 var param: String?
@IBOutlet var inputId: UITextField!
@IBOutlet var inputPass: UITextField!

override func viewDidLoad() {
        super.viewDidLoad()

        NetworkHandler.LoginBoard({ LoginList in
        self.LoginList = LoginList
        }, param: param ?? "")
}
@IBAction func btnLogin(_ sender: UIButton) {
   param = "userId=(inputId.text ?? "")amp;userPw=(inputPass.text ?? "")"
   print("This is Param = ",param!)

let controller = NetworkHandler.LoginBoard(completeHandler: (Login) -> Void, param: param ?? "")
controller.param = param // ERROR [Value of tuple type '()' has no member 'param'

}
  

NetworkHandler.swift

 class func LoginBoard(_ completeHandler: @escaping (Login) -> Void, param: String) {
    let loginboard: String = MAIN_URL   "/member/login"
    guard let url = URL(string: loginboard) else {
      print("Error: cannot create URL")
        return
    }
    let param = param
    let paramData = param.data(using: .utf8)
}
  

Я до сих пор не знаю, в чем проблема.

Комментарии:

1. Вы назначаете метод своему controller переменному. LoginBoard метод возвращает Void . Поскольку ошибка указывает на пустой кортеж () , такой же, как Void не имеет param свойства.

2. Извините, я исправил, базовый синтаксис еще не идеален, поэтому есть много ошибок. Я исправил ту часть, о которой вы сообщили. Тогда спасибо, если loginBoard возвращает void , Loginviewcontroller и свойство не совпадают, поэтому вы вообще не можете передать значение?

3. ваш обработчик завершения должен быть последним параметром вашей подписи метода входа в систему.

4.Что controller должно быть? Например, внутри UIView — это тип frame , который вы можете сделать let view = UIView() view.frame = CGRect() ; в вашем случае вы controller.param = param хорошо справляетесь с тем, что это за тип controller ? Я спрашиваю, потому что вы установили let controller = NetworkHandler.LoginBoard(completeHandler: (Login) -> Void, param: param ?? "") , но NetworkHandler.LoginBoard ничего не возвращает. Какой класс LoginBoard предполагается возвращать?