提问者:小点点

如何根据不同类型的分配器实现不同的功能?


我希望能解释我的问题。 我有一个名为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中执行?


共2个答案

匿名用户

只需检查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
    }
}