2017-08-26 176 views
0

在下面的代码中,我对“自我”实际引用的内容感到困惑。在Swift 3中,在这种情况下自我指的是什么对象

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 
} 

我知道,我设置downloadedImage作为使用其图像属性ImageView的,但我不知道为什么需要自我,它拥有在这种情况下什么样的数据块。我知道它指的是正在处理的viewController类的实例,但是该实例是UIImage,downloadedImage还是示例URL中图像的资源数据?

+0

此代码包含在哪个类中? – Carcigenicate

+3

它指的是这个代码所在的类。 – rmaddy

+1

可能是https://stackoverflow.com/questions/26835013/what-is-self-used-for-in-swift – rmaddy

回答

0

当你调用对象的(非静态/类)功能,你怎么称呼它是这样的:里面的function()

obj.function() 

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

就你而言,很明显这段代码来自某种ViewController。该VC有一个imageView属性,可能代表VC中的一个UIImageView。我猜你的代码是在viewDidLoad(或类似的)调用的函数内,或者它可能是按钮点击的目标。

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

+0

非常好,但我会建议在任何深度添加“函数内部()”。我的观点是,如果function()调用'self.function2()',那么function2()内的'self'仍然是'obj'。所有这一切都是真实的,即使函数或函数2是继承的。这就是为什么我将OP引用到多态性的讨论中...... – matt

1

由于类继承,仅通过查看代码self引用的内容就不可能知道。这一切都取决于在运行时什么self

self表示消息最初发送给谁的实际实例,但是您甚至没有显示此代码被封装的方法,所以甚至没有足够的信息来进行猜测。

如果您对某个特定场合下的self有疑问,请记录它(与NSLogprint)。

+1

可能帮助你在这里阅读我的解释:http://www.apeth.com/swiftBook/ch01.html#_self在这里:http://www.apeth.com/swiftBook/ch04.html#_polymorphism – matt

+0

所以“自我“创建了一个类的实例,本身就是类的实例?这就是我从你的链接 –

+2

号自我不**创建**任何实例。自我只是指它在范围内的类的实例。如果没有该类的实例,那么包含'self'的代码将不会运行,因为没有实例。把“自我”看成是每个引用自己的类的属性。就像在这种情况下imageView是视图控制器的属性一样。 – Fogmeister

相关问题