在swift中通过inout参数编写一个var

Posted

技术标签:

【中文标题】在swift中通过inout参数编写一个var【英文标题】:Writing a var via inout parameter in swift 【发布时间】:2015-01-05 09:54:50 【问题描述】:

我想将几张图片加载到一个模型中。我正在尝试使用 loadImage() 函数和 inout 参数来解决这个问题。但由于某种原因,图像变量始终为空。我没有看到图像。

这里有什么问题?

   public var image: UIImage = UIImage()

   // Somewhere in the init function 
   self.loadImage("http://www.domain.com/cats.img", targetImage: &self.image)

   func loadImage(url:String, inout targetImage:UIImage) 
        dispatch_group_enter(self.dispatch_group);

        println("Start loading image \(url)")

        var request:Alamofire.Request = Alamofire.request(.GET, url).responseImage() 
            (request, _, image, error) in
            if error == nil && image != nil 
                println("imageRequestSuccess")

                // Save the image to the model property
                targetImage = image!

                // Dispatch if success
                dispatch_group_leave(self.dispatch_group)
             else 
                println("imageRequestFailure")

                // Dispatch also to handle failure
                dispatch_group_leave(self.dispatch_group)
            
        
    

【问题讨论】:

【参考方案1】:

使用闭包效果很好......但看起来很难看

self.loadImage(self.image_url!, onSuccess:  s1 in return self.image = s1 )



    func loadImage(url:String, onSuccess: (s1:UIImage) -> () ) 
        dispatch_group_enter(self.dispatch_group);

        println("Start loading image \(url)")

        var request:Alamofire.Request = Alamofire.request(.GET, url).responseImage() 
            (request, _, image, error) in
            if error == nil && image != nil 
                println("imageRequestSuccess")

                onSuccess(s1:image!)

                // Dispatch if success
                dispatch_group_leave(self.dispatch_group)
             else 
                println("imageRequestFailure")

                // Dispatch also to handle failure
                dispatch_group_leave(self.dispatch_group)
            
        
    

【讨论】:

以上是关于在swift中通过inout参数编写一个var的主要内容,如果未能解决你的问题,请参考以下文章

如何解决转义闭包捕获 Swift 中的“inout”参数?

Swift中什么时候用变量参数inout参数

Swift 3.0 错误:转义闭包只能按值显式捕获 inout 参数

swift 在结构上使用inout参数

在 Xcode 中通过 Objective-C 代码测试 Swift 代码

Swift 4:转义闭包只能通过值显式捕获 inout 参数