Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift委托值为零_Ios_Swift_Xcode_Delegates - Fatal编程技术网

Ios Swift委托值为零

Ios Swift委托值为零,ios,swift,xcode,delegates,Ios,Swift,Xcode,Delegates,请在我的代码中帮助配置代理。目前,我得到的值为零 这是第一节课: @IBOutlet weak var loginField: UITextField! @IBOutlet weak var passField: UITextField! extension LoginViewController: LoginDelegate { func checkFields() -> [String:String] { var result =

请在我的代码中帮助配置代理。目前,我得到的值为零

这是第一节课:

    @IBOutlet weak var loginField: UITextField!
    @IBOutlet weak var passField: UITextField!

    extension LoginViewController: LoginDelegate {

    func checkFields() -> [String:String] {

        var result = [String:String]()
        if loginField.text == "" && passField.text == "" {
            CRNotifications.showNotification(type: .info, title: "Введите логин и пароль", message: "Укажите логин и пароль для авторизации в системе", dismissDelay: 4)
        } else if loginField.text == "" {
            CRNotifications.showNotification(type: .info, title: "Введите логин", message: "Укажите логин для авторизации в системе", dismissDelay: 4)
        } else if passField.text == "" {
            CRNotifications.showNotification(type: .info, title: "Введите пароль", message: "Укажите пароль для авторизации в системе", dismissDelay: 4)
        } else {
            result["login"] = loginField.text
            result["password"] = passField.text
        }
        return result
    } 
}
    protocol LoginDelegate {
    func checkFields() -> [String:String] 
}

class SettingsRepositoryImpl: NSObject, SettingsService {

    // MARK: Authorization
    var delegate:LoginDelegate?

    func authorization() -> AnyPromise {

        let loginAndPassword = delegate?.checkFields()

        delegate? = LoginViewController()

        let login = loginAndPassword?["login"]
        let password = loginAndPassword?["password"]

        print(login)
        print(password)

        let url = "http://gps-tracker.com.ua/login.php"
        let parameters: Parameters = [
            "login": login,
            "password": password
        ]

        let promise = Promise<Bool> { fulfill, reject in

            if Reachability.isConnectedToNetwork() == true
            {
                Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.default).responseJSON { response in
                    switch response.result {
                    case .success:
                        fulfill(true)
                    case .failure:
                        CRNotifications.showNotification(type: .error, title: "Ошибка авторизации", message: "Неправильный логин или пароль", dismissDelay: 4)
                        fulfill(false)
                    }
                }
            }
            else
            {
                CRNotifications.showNotification(type: .error, title: "Ошибка связи", message: "Проблема с интернет соединением", dismissDelay: 4)
            }
        }
        return AnyPromise(promise)
    }

}
这是第二条:

    @IBOutlet weak var loginField: UITextField!
    @IBOutlet weak var passField: UITextField!

    extension LoginViewController: LoginDelegate {

    func checkFields() -> [String:String] {

        var result = [String:String]()
        if loginField.text == "" && passField.text == "" {
            CRNotifications.showNotification(type: .info, title: "Введите логин и пароль", message: "Укажите логин и пароль для авторизации в системе", dismissDelay: 4)
        } else if loginField.text == "" {
            CRNotifications.showNotification(type: .info, title: "Введите логин", message: "Укажите логин для авторизации в системе", dismissDelay: 4)
        } else if passField.text == "" {
            CRNotifications.showNotification(type: .info, title: "Введите пароль", message: "Укажите пароль для авторизации в системе", dismissDelay: 4)
        } else {
            result["login"] = loginField.text
            result["password"] = passField.text
        }
        return result
    } 
}
    protocol LoginDelegate {
    func checkFields() -> [String:String] 
}

class SettingsRepositoryImpl: NSObject, SettingsService {

    // MARK: Authorization
    var delegate:LoginDelegate?

    func authorization() -> AnyPromise {

        let loginAndPassword = delegate?.checkFields()

        delegate? = LoginViewController()

        let login = loginAndPassword?["login"]
        let password = loginAndPassword?["password"]

        print(login)
        print(password)

        let url = "http://gps-tracker.com.ua/login.php"
        let parameters: Parameters = [
            "login": login,
            "password": password
        ]

        let promise = Promise<Bool> { fulfill, reject in

            if Reachability.isConnectedToNetwork() == true
            {
                Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.default).responseJSON { response in
                    switch response.result {
                    case .success:
                        fulfill(true)
                    case .failure:
                        CRNotifications.showNotification(type: .error, title: "Ошибка авторизации", message: "Неправильный логин или пароль", dismissDelay: 4)
                        fulfill(false)
                    }
                }
            }
            else
            {
                CRNotifications.showNotification(type: .error, title: "Ошибка связи", message: "Проблема с интернет соединением", dismissDelay: 4)
            }
        }
        return AnyPromise(promise)
    }

}
protocollogindelegate{
func checkFields()->[字符串:字符串]
}
类SettingsRepositoryImpl:NSObject,SettingsService{
//马克:授权
var代表:LoginDelegate?
func authorization()->AnyPromise{
让loginAndPassword=delegate?.checkFields()
委托?=LoginViewController()
让登录名=登录名和密码?[“登录名”]
让密码=登录密码?[“密码”]
打印(登录)
打印(密码)
让url=”http://gps-tracker.com.ua/login.php"
let参数:参数=[
“登录”:登录,
“密码”:密码
]
让允诺=允诺{履行,拒绝
如果可达性.isconnectedtonework()==true
{
请求(url,方法:.post,参数:参数,编码:URLEncoding.default).responseJSON{response in
开关响应。结果{
成功案例:
完成(真实)
案例.失败:
CRNotifications.showNotification(类型:。错误,标题:“аааааааааа”,消息:“ааааааааааа
完成(假)
}
}
}
其他的
{
CRNotifications.showNotification(类型:。错误,标题:“Пбббббббб”,消息:“Пббббббббббб107
}
}
返回任何承诺(承诺)
}
}

如果checkFields()没有nil值,我应该添加什么呢?我完全不明白。我非常希望您的帮助。

您正在
授权
功能中创建
LoginViewController
的新实例,但是您应该如何在
LoginViewController
中创建
setingsrepositoryimpl
的实例呢

fileprivate let settingsAPI = SettingsRepositoryImpl()
self.settingsAPI.authorization()
然后在
LoginViewController

override func viewDidLoad() {
    super.viewDidLoad()
    self.settingsAPI.delegate = self
}
此外,您还应将您的代理更改为

weak var delegate: LoginDelegate?
然后在你的函数中删除它

delegate? = LoginViewController()
您可以在
LoginViewController
内部调用
authorization

fileprivate let settingsAPI = SettingsRepositoryImpl()
self.settingsAPI.authorization()

您需要在LoginViewController中分配代理。还可以让loginAndPassword=delegate?.checkFields()delegate?=LoginViewController()这是错误的。我想在authorization()中调用一个函数checkFields(),但你写了,我调用了self.settingsAPI.authorization(),我想在authorization()中得到checkFields()的结果。你能帮忙吗?@maximazhuga你想从
LoginViewController
或者从哪里调用
authorization()
?是的,authorization(),我从LoginViewController调用,那么它现在就可以工作了,你应该改变一切,我写道。由于您在
viewDidLoad
内部将
delegate
设置为
self
让loginAndPassword=delegate?.checkFields()应该可以工作