2017-08-26 1 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 
} 

は、私はその画像のプロパティを使用してImageViewのようdownloadedImageを設定してることを知っているが、私は自分が必要とされている理由はわからないとデータのどの部分がこのような状況で保持しています。私はそれが作業中のviewControllerクラスのインスタンスを参照しているが、インスタンスのUIImage、downloadedImage、またはリソースの例のURLの画像からデータですか?

+0

このコードはどのクラスに含まれていますか? – Carcigenicate

+3

これは、このコードがどのクラスに属するかを表します。 – rmaddy

+1

おそらく、.viewDidLoad関数内のhttps://stackoverflow.com/questions/26835013/what-is-self-used-for-in-swift – rmaddy

答えて

0

あなたがオブジェクトの(非静的/クラス)関数を呼び出すと、あなたはこのようにそれを呼び出す:function()の内部

obj.function() 

selfは、それが上で呼び出されたオブジェクトを参照(この場合はそうobj )。 selfは、関数呼び出しのターゲットを参照するのに便利な自動変数のようなものです。

あなたの場合、このコードはある種のViewControllerからのものであることは明らかです。そのVCには、おそらくVCのUIImageViewを表すimageViewプロパティがあります。私はあなたのコードがviewDidLoad(またはこれに類するもの)によって呼び出される関数の中にあると推測しています。あるいは、おそらくボタンタップのターゲットです。

これらの関数が呼び出されると、selfはその関数が呼び出されたViewControllerオブジェクトを参照します。

+0

非常に良いですが、私は "内部の任意の深さで関数"()を追加することをお勧めします。私の指摘は、function()が 'self.function2()'を呼び出すと、function2()内の 'self 'は' obj'です。関数や関数2が継承されていても、これはすべて真です。それで私はOPに多型の議論を言いました... – matt

1

クラス継承のため、selfが参照するコードを見るだけではわかりません。それは実行時にselfであることに依存します。

selfは、メッセージが最初に送信された実際のインスタンスを意味しますが、このコードがラップされているメソッドも表示していないため、推測するにも十分な情報がありません。

特定の機会にselfが疑わしい場合は、ログに記録してください(NSLogまたはprint)。

+1

ここで私の説明を読むのに役立つかもしれません:http://www.apeth.com/swiftBook/ch01.html#_selfそしてここ:http://www.apeth.com/swiftBook/ch04.html#_polymorphism – matt

+0

"自己 "はクラスのインスタンスを作成し、それ自体はクラスのインスタンスですか?私はあなたのリンクから何を得たのですか –

+2

いいえ、自己は**作成していません**すべてのインスタンス。自己は、それが範囲内にあるクラスのインスタンスを参照するだけです。そのクラスのインスタンスが存在しない場合、 'self'を含むコードはインスタンスが存在しないため実行されません。 「自己」とは、それ自身を指すすべてのクラスの特性のようなものです。この場合、imageViewはView Controllerのプロパティです。 – Fogmeister

関連する問題