Ios swift 3中的协议和委托不在ViewController之间发送值
我有两个视图控制器(Ios swift 3中的协议和委托不在ViewController之间发送值,ios,swift,Ios,Swift,我有两个视图控制器(SignInViewcontroller.swift和ProfilePage.swift) 我想将字符串从SignenViewController传递到ProfilePageviewcontroller。 我在SignenViewController中创建了一个协议。我在ProfilePagecontroller中委托了该方法。当我通过协议发送字符串时,我没有在ProfilePageviewcontroller中收到该字符串,我错了。请帮助我解决问题。 这是我的密码: 登录查
SignInViewcontroller.swift
和ProfilePage.swift
)
我想将字符串从SignenViewController
传递到ProfilePage
viewcontroller
。
我在SignenViewController
中创建了一个协议。我在ProfilePage
controller
中委托了该方法。当我通过协议发送字符串时,我没有在ProfilePage
viewcontroller
中收到该字符串,我错了。请帮助我解决问题。
这是我的密码:
登录查看控制器。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)
}
}
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)")
}
}
ProfilePage.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)
}
}
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)")
}
}
当您要访问导航控制器中不存在的NextVC时,您必须将数据绑定到类的实例,就像这样:
let vc = UIStoryboard(name: "ProfilePage", bundle: nil).instantiateInitialViewController() as! ProfilePage
vc. logInToken = "abcdefgh"
self.navigationController?.pushViewController(vc, animated: true)
class ProfilePage: UIViewController {
var logInToken = "" // you will receive the token in this variable.
}
在您的情况下,ProfilePage
似乎不存在
注意:-当您想将值从ProfilePage
传递给SignenViewController时,委托将使用相反的大小写。
或
如果您的all API需要令牌,以便您可以在类级别声明或将其保存到UserDefauls:
1)
2)
UserDefaults.standard.set("aasdfa", forKey: "token")
let token = UserDefaults.standard.value(forKey: "token"
此外,您正在进行糟糕的编码,您必须理解OOP的功能
let signInVC = SignInViewController()
signInVC.delegateToken = self
这将重新感知内存中的seprate实例和每个
对象有自己的属性和行为
当您要访问导航控制器中不存在的NextVC时,您必须将数据绑定到类的实例,就像这样:
let vc = UIStoryboard(name: "ProfilePage", bundle: nil).instantiateInitialViewController() as! ProfilePage
vc. logInToken = "abcdefgh"
self.navigationController?.pushViewController(vc, animated: true)
class ProfilePage: UIViewController {
var logInToken = "" // you will receive the token in this variable.
}
在您的情况下,ProfilePage
似乎不存在
注意:-当您想将值从ProfilePage
传递给SignenViewController时,委托将使用相反的大小写。
或
如果您的all API需要令牌,以便您可以在类级别声明或将其保存到UserDefauls:
1)
2)
UserDefaults.standard.set("aasdfa", forKey: "token")
let token = UserDefaults.standard.value(forKey: "token"
此外,您正在进行糟糕的编码,您必须理解OOP的功能
let signInVC = SignInViewController()
signInVC.delegateToken = self
这将重新感知内存中的seprate实例和每个
对象有自己的属性和行为
如果您是从SignUpViewController到ProfilePageViewController,则可以在从logingAzure()获取所需的singIn标记后,在导航时传递字符串值。我假定:
let storyboard = UIStoryboard(name: "Profile", bundle: Bundle.main)
if let profileVC = storyboard.instantiateViewController(withIdentifier:
"ProfilePageViewController") as? ProfilePageViewController {
profileVC.loginToken = token
}
通过创建一个
SessionManager
singleton,在登录或注册时处理令牌和其他资源来实现这一点如果您是从SignUpViewController到ProfilePageViewController,则可以在从logingAzure()获取所需的singIn令牌后,在导航时传递字符串值。我假定:
let storyboard = UIStoryboard(name: "Profile", bundle: Bundle.main)
if let profileVC = storyboard.instantiateViewController(withIdentifier:
"ProfilePageViewController") as? ProfilePageViewController {
profileVC.loginToken = token
}
要做到这一点,请创建一个
会话管理器
单例,以便在登录或注册时处理令牌和其他资源在这种情况下,您需要一个对象来存储来自SignenViewController的令牌,直到ProfilePage请求它为止
class TokenStorage {
static let shared = TokenStorage()
public var token: String = ""
}
然后您将收到令牌呼叫:
TokenStorage.shared.token = receivedToken
并在ProfilePage中请求它:
print(TokenStorage.shared.token)
在这种情况下,您需要一个对象来存储SignenViewController的令牌,直到ProfilePage请求它为止
class TokenStorage {
static let shared = TokenStorage()
public var token: String = ""
}
然后您将收到令牌呼叫:
TokenStorage.shared.token = receivedToken
并在ProfilePage中请求它:
print(TokenStorage.shared.token)
只需使用“为赛格做准备”
只需使用“为赛格做准备”
尝试使用:
protocol sendTokenDelegate: class {
func sendToken(login:String)
}
class SignInViewController: UIViewController {
weak var delegateToken:sendTokenDelegate?
func loginAzure(email: String, password: String) {
token = "abcdefgh"
if self.delegateToken != nil{
self.delegateToken?.sendToken(login: token)
}
}
}
class ProfilePage: UIViewController, UITableViewDelegate, UITableViewDataSource, sendTokenDelegate {
override func viewDidLoad() {
//get your instantiateViewController from storyboard
let signInVC = self.storyboard?.instantiateViewController(withIdentifier: "SignInViewControllerIdentifire") as! SignInViewController
signInVC.delegateToken = self
}
func sendToken(login: String) {
self.logInToken = login
print("Login Token in Profile Page is \(login)")
}
}
尝试使用:
protocol sendTokenDelegate: class {
func sendToken(login:String)
}
class SignInViewController: UIViewController {
weak var delegateToken:sendTokenDelegate?
func loginAzure(email: String, password: String) {
token = "abcdefgh"
if self.delegateToken != nil{
self.delegateToken?.sendToken(login: token)
}
}
}
class ProfilePage: UIViewController, UITableViewDelegate, UITableViewDataSource, sendTokenDelegate {
override func viewDidLoad() {
//get your instantiateViewController from storyboard
let signInVC = self.storyboard?.instantiateViewController(withIdentifier: "SignInViewControllerIdentifire") as! SignInViewController
signInVC.delegateToken = self
}
func sendToken(login: String) {
self.logInToken = login
print("Login Token in Profile Page is \(login)")
}
}
您要将SignenViewController登录到ProfilePage吗?如何以及在何处显示
SignenViewController
?是的。我想将字符串从SignenViewController发送到ProfilePage在哪里调用登录(电子邮件:string,密码:string)
方法?登录后,我将得到响应。我不想演示SignenViewController。我只想在加载ProfilePage时传递字符串值,我想通过代理从SignenViewController获取令牌字符串。是否要将SignenViewController登录到ProfilePage?如何演示以及在何处演示SignenViewController
?是。我想从SignenViewController发送字符串到ProfilePageLoginzure(email:String,password:String)方法在哪里调用?登录后,我将得到响应。我不想演示SignenViewController。我只想在加载ProfilePage时传递字符串值,我想通过代理从SignenViewController获取令牌字符串。我不会直接从SignenViewController转到ProfilePage。在SignInViewController中,我获得JSON令牌。当我加载ProfilePage时,我想得到那个令牌。你在使用segua吗?我没有使用任何SEGUE,那么最好的方法就是使用UserDefault@NishantBhindi这是糟糕的编码风格如果你想在应用程序存在的时候保持变量,那么你必须使用UserDefault
我不会直接从SignInViewController转到ProfilePage。在SignInViewController中,我获得JSON令牌。当我加载ProfilePage时,我想得到那个令牌。你在使用segua吗?我没有使用任何SEGUE,那么最好的方法就是使用UserDefault@NishantBhindi这是糟糕的编码风格如果你想在应用程序存在的时候保持变量,那么你必须使用UserDefault
我没有使用任何segue.My n