提问者:小点点

在Swift 3中,self在此实例中引用了什么对象


在下面的代码中,我对“自我”实际上指的是什么感到困惑。

let imageURL = URL(string : “http://exampleURLh.jpg”)!
let task=imageDataURLSession.sharedSession().dataTaskWithURL(imageURL, {(data, response, error) in
    print (“task finished”)
}
task.resume()
if error == nil {
    let downloadedImage = UIImage(data: data!)

    self.imageView.image = downloadedImage
}

我知道我正在使用其image属性将downloadedImage设置为imageView,但我不确定为什么需要self以及在这种情况下它持有什么数据。我知道它指的是正在处理的viewController类的实例,但该实例是UIImage、downloadedImage还是示例URL中图像中的资源数据?


共2个答案

匿名用户

因为类继承,光看代码不可能知道self指的是什么。这完全取决于self在运行时是什么。

self表示消息最初发送到的实际实例,但您甚至没有显示包装此代码的方法,因此甚至没有足够的信息来猜测。

如果您在某些特定场合对self是什么有疑问,请记录它(使用NSLogprint)。

匿名用户

当您调用对象的(非静态/类)函数时,您可以这样调用它:

obj.function()

function()内部,self引用它被调用的对象(在这种情况下是obj)。self就像一个自动变量,你可以方便地引用函数调用的目标。

在你的例子中,很明显这段代码来自某种ViewController。VC有一个imageView属性,表示(可能)VC中的UIImageView。我猜你的代码在一个函数中,这个函数要么被viewDyLoad调用(或类似),要么可能是按钮点击的目标。

调用这些函数时,self将引用调用该函数的ViewController对象。