ios - swift 3 中的协议(protocol)和委托(delegate)不在 View Controller 之间发送值

标签 ios swift

我有两个 View Controller (SignInViewcontroller.swiftProfilePage.swift) 我想将字符串从 SignInViewcontroller 传递到 ProfilePage viewcontroller。 我在 SignInViewcontroller 中创建了一个协议(protocol)。我委托(delegate)了 ProfilePage controller 中的方法。当我通过协议(protocol)发送字符串时,我没有收到string in ProfilePage viewcontroller 我哪里错了。请帮我解决。 这是我的代码:

SignInViewController.swift

protocol sendTokenDelegate: class {
    func sendToken(login:String)
}
class SignInViewController: UIViewController  {
    weak var delegateToken:sendTokenDelegate?
    func loginAzure(email: String, password: String) {
        token = "abcdefgh"
        self.delegateToken?.sendToken(login: token)
    }
}

ProfilePage.swift

class ProfilePage: UIViewController, UITableViewDelegate, UITableViewDataSource, sendTokenDelegate {
    override func viewDidLoad() {
        let signInVC = SignInViewController()
        signInVC.delegateToken = self
    }
    func sendToken(login: String) {
        self.logInToken = login
        print("Login Token in Profile Page is \(login)")
    }
}

最佳答案

在这种情况下,您需要一个对象来存储来自 SignInViewController 的 token ,直到 ProfilePage 请求它。

class TokenStorage {
    static let shared = TokenStorage()
    public var token: String = ""
}

然后您收到 token 调用:

TokenStorage.shared.token = receivedToken

并在 ProfilePage 中请求它:

print(TokenStorage.shared.token)

关于ios - swift 3 中的协议(protocol)和委托(delegate)不在 View Controller 之间发送值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46110186/

相关文章:

ios - 具有共享数据的应用程序的初始点

ios - 如何一个接一个地执行多个异步请求

swift - TouchesMoved swift 滞后

objective-c - 如何从 NSDate 检索字符串?

objective-c - 如何发送按钮事件 - UIControlEventTouchUpInside

ios - reloadRowsAtIndexPaths:@ [indexPath] withRowAnimation:UITableViewRowAnimationNone在iOS 11上工作不正确吗?

ios - 使用 Swift 创建 Gameboy 游戏

ios - 是否有一个 swift 库可以让您自定义 JSON 中键的顺序?

ios - Swift 3 中 "M_PI_4"和 "M_PI_2"的语法是什么?

ios - 创建一个包含主题名称和投票的部分