Going off van @Alexander - Herstel Monica en wat ik neem aan dat wat de code te kijken als om uw probleem aan te pakken.
Met behulp van MVC:
In Models map (data / logica deel)
public class User {
private var name: String!
private var userEmail: String!
public var hasFailed: Bool?
init() {
name = ""
userEmail = ""
hasFailed = nil
}
deinit {
name.removeAll()
userEmail.removeAll()
hasFailed = nil
}
public func setName(name: String) { self.name = name }
public func getName() -> String { return name }
public func setEmail(email: String) { userEmail = email }
public func getEmail() ->String { return userEmail }
public static func sendEmailWithRestLing(email: String) {
// your other code
switch response.result {
case .success(_):
//your code
hasFailed = false
break
case .failuare(_):
// your code
hasFailed = true
break
}
}
}
User Manager klasse aanbrengen singleton ontwerp
final class UserManager {
private var user = User()
static let instance = UserManager()
private init(){}
public func userName(name: String) {
if (name.count > 3) {
user.setName(name: name)
}
else { print("user name is too short") }
}
public func userEmail(email: String) {
if (email.count > 3) {
user.setEmail(email: email)
}
else { print("user email is too short") }
}
public func getUserName() -> String {
let name = user.getName()
if (name.isEmpty) { return "user name is Empty" }
return name
}
public func getUserEmail() -> String {
let email = user.getEmail()
if (email.isEmpty) { return "user email is Empty" }
return email
}
public func doKatieTask(link: String) -> Int {
guard let myValue = user.hasFailed else {
return -1
}
if (myValue) { return 1}
return 0
}
}
Zo, nu in het Controllers map en aangezien we een één-op-één relatie zullen we gebruik maken van afgevaardigde ontwerppatroon. Als gehad one-to-many met de opvatting controller. Gebruik waarnemers.
class ViewController: UIViewController {
@IBOutlet weak var txtName: UITextField!
@IBOutlet weak var txtEmail: UITextField!
var _hasFail: Bool!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
@IBAction func doTask() {
UserManager.instance.userName(name: txtName.text!)
UserManager.instance.userEmail(email: txtEmail.text!)
switch UserManager.instance.doKatieTask(link: txtEmail.text!) {
case 0:
_hasFail = false
break
case 1:
_hasFail = true
break
default:
print("hasFailed is nil")
break
}
if let vc = storyboard?.instantiateViewController(identifier: "passwordVC") as? PasswordResetViewController {
vc.modalPresentationStyle = .fullScreen
vc.delegate = self
self.present(vc, animated: true, completion: nil)
}
}
}
extension ViewController: KatieDelegate {
var hasFailed: Bool {
get {
return _hasFail
}
set {
_hasFail = newValue
}
}
}
In PasswordReset UIViewController
protocol KatieDelegate {
var hasFailed: Bool { get set }
}
class PasswordResetViewController: UIViewController {
@IBOutlet weak var lblName: UILabel!
@IBOutlet weak var lblEmail: UILabel!
var delegate: KatieDelegate?
private var _hasFailed: Bool!
override func viewDidLoad() {
super.viewDidLoad()
lblName.text = UserManger.instance.getUserName()
lblEmail.text = UserManger.instance.getUserEmail()
if let delegate = delegate {
print("The value for has failed is: .....\(delegate.hasFailed)!")
}
else { print("error with delegate") }
}
}