我希望能解释我的问题。 我有一个名为TouristPictureViewController的视图控制器
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,因此,我想在这个VC中显示这个特定的图像。 现在我应该在这里放什么条件,以便当我通过执行segue来接近这个VC时,getProfile函数不应该在viewDidLoad中执行?
只需检查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)
}
}
}
您可以声明一个全局布尔变量,如shouldLoadProfile
在TouristPictureViewController中
var shouldLoadProfile: bool = false
并且在viewDidLoad()方法中,检查shouldLoadProfile与否。 另外,在转换到TouristPictureViewController之前,您需要在shouldLoadProfile变量中设置true或false。
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
}
}