如何根据不同类型的segue执行不同的功能?
How to perform different function on the base of different type of segue?
我希望我能够解释我的问题。
我有一个名为 TouristPictureViewController
的 ViewController
class TouristPictureViewController: UIViewController {
@IBOutlet weak var picture: UIImageView!
var userID = Auth.auth().currentUser?.uid
var imageURL:String?
override func viewDidLoad() {
super.viewDidLoad()
getProfilePicture(SuccessCompletion: { (Img) in
self.picture.image = Img
}) { (error) in
print(error)
}
}
func getProfilePicture(SuccessCompletion: @escaping (_ image:UIImage) -> (), FailureCompletion: @escaping (_ error:Error) -> ()) {
let referecne = Storage.storage().reference(withPath: "user/\(userID!)")
referecne.getData(maxSize: 5 * 1024 * 1024) { (data, error) in
if let err = error {
print(err)
FailureCompletion(err)
}
else {
if let _data = data {
let myImage:UIImage! = UIImage(data: _data)
SuccessCompletion(myImage)
}
}
}
}
}
这个VC可以在两种不同的情况下调用。首先,当用户想要查看他们的个人资料图片时调用它,在这种情况下,它通过 Storyboard.instantiateViewController 触发,然后在 VC, getProfilePicture函数被调用。现在,这个 VC 也是通过 segue 触发的,在这种情况下,我将一个图像 URL 传递给这个 VC,因此我想在这个 [=] 中显示那个特定的图像29=]。现在我应该把什么条件放在这里,这样 getProfile 函数不应该在 viewDidLoad 中执行,当我通过执行 Segue 接近这个 VC 时?
您可以声明一个全局布尔变量,例如 shouldLoadProfile
在TouristPictureViewController
var shouldLoadProfile: bool = false
然后在 viewDidLoad() 方法中,检查 shouldLoadProfile 与否。此外,在转换到 TouristPictureViewController.
之前,您需要将 true 或 false 设置为 shouldLoadProfile 变量
override func viewDidLoad(){
super.viewDidLoad()
if shouldLoadProfile{
getProfilePicture(SuccessCompletion: { (Img) in
self.picture.image = Img
}) { (error) in
print(error)
}
}else{
//set imageURL into the UIImageView
}
}
只需检查imageURL
,在instantiateViewController案例
中是nil
override func viewDidLoad() {
super.viewDidLoad()
if let urlString = imageURL {
// load image and assign it to self.picture.image
} else {
getProfilePicture(SuccessCompletion: { img in
self.picture.image = img
}) { error in
print(error)
}
}
}
我希望我能够解释我的问题。 我有一个名为 TouristPictureViewController
的 ViewControllerclass TouristPictureViewController: UIViewController {
@IBOutlet weak var picture: UIImageView!
var userID = Auth.auth().currentUser?.uid
var imageURL:String?
override func viewDidLoad() {
super.viewDidLoad()
getProfilePicture(SuccessCompletion: { (Img) in
self.picture.image = Img
}) { (error) in
print(error)
}
}
func getProfilePicture(SuccessCompletion: @escaping (_ image:UIImage) -> (), FailureCompletion: @escaping (_ error:Error) -> ()) {
let referecne = Storage.storage().reference(withPath: "user/\(userID!)")
referecne.getData(maxSize: 5 * 1024 * 1024) { (data, error) in
if let err = error {
print(err)
FailureCompletion(err)
}
else {
if let _data = data {
let myImage:UIImage! = UIImage(data: _data)
SuccessCompletion(myImage)
}
}
}
}
}
这个VC可以在两种不同的情况下调用。首先,当用户想要查看他们的个人资料图片时调用它,在这种情况下,它通过 Storyboard.instantiateViewController 触发,然后在 VC, getProfilePicture函数被调用。现在,这个 VC 也是通过 segue 触发的,在这种情况下,我将一个图像 URL 传递给这个 VC,因此我想在这个 [=] 中显示那个特定的图像29=]。现在我应该把什么条件放在这里,这样 getProfile 函数不应该在 viewDidLoad 中执行,当我通过执行 Segue 接近这个 VC 时?
您可以声明一个全局布尔变量,例如 shouldLoadProfile
在TouristPictureViewController
var shouldLoadProfile: bool = false
然后在 viewDidLoad() 方法中,检查 shouldLoadProfile 与否。此外,在转换到 TouristPictureViewController.
之前,您需要将 true 或 false 设置为 shouldLoadProfile 变量override func viewDidLoad(){
super.viewDidLoad()
if shouldLoadProfile{
getProfilePicture(SuccessCompletion: { (Img) in
self.picture.image = Img
}) { (error) in
print(error)
}
}else{
//set imageURL into the UIImageView
}
}
只需检查imageURL
,在instantiateViewController案例
nil
override func viewDidLoad() {
super.viewDidLoad()
if let urlString = imageURL {
// load image and assign it to self.picture.image
} else {
getProfilePicture(SuccessCompletion: { img in
self.picture.image = img
}) { error in
print(error)
}
}
}