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()应该可以工作