Xcodeでアプリを作っているとselfというものがよく出て来るけれど、
何のことだかいまいちわからなかったり、
いろんなところでselfが出て来るから、関数にまとめちゃったりしたいんだけど、
selfがなんだかわからないから、関数で使えない…
という感じで困ったことが多かったので、
selfについてわかったことを、私なりにメモしておこうと思います。
もくじ
selfとは
selfとは、
selfという文字が書かれている、そのクラス自体のことを言うらしいです。
そのため、例えばこんな、classTestという名前のクラスがあったとしたら、
//クラス class classTest { } |
selfというのはclassTest自体の事を指すみたいです。
viewDidLoadなどで使うselfとは
では、よくあるviewDidLoadの中に書かれているselfとは何かと言うと…
(設定や内容によって違うかもしれませんが)
自分が作った「なんちゃらViewController」という名前の
UIViewControllerの事を指すようでした。
つまり、
class FirstViewController: UIViewController { |
例えばこんな風に書かれている場合、
「FirstViewController」という名前のUIViewControllerが
selfにあたるようです。
viewDidLoadなどで使うself、使い方の例
そこで、実際にselfを使った場合の例を書いてみたいと思います。
<self.titleを他のファイルで取得してみる>
例えば、「FirstViewController」という名前のUIViewControllerがあり、
この中のタイトル(self.title)を、
他のファイル「testFile.swift」にある「funcTest」内で取得したい場合。
(見やすいように、画像内のコードを以下に貼り付けておきます)
FirstViewController.swift
import UIKit class FirstViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //このタイトルを、他の場所でも取得したい。 self.title = “selftitle” } |
testFile.swift
import Foundation func funcTest() { //ここでselfのtitleを使いたい } |
<この場合のselfは、これ>
この場合、self.titleのselfは、
「FirstViewController」という名前のUIViewControllerの事になるようです。
それでは、実際にself.titleを取得してみたいと思います。
funcTestの中で
UIViewControllerに関する値(self.title)を取得したいので、
funcTestでUIViewControllerの値を取得できるようにします。
例えば、こんな感じです。
func funcTest(_ sender: UIViewController) { } |
この時に、import UIKitも付け加えてください。
(UiViewControllerを使うために必要だからです。
つけ忘れると、エラーになっちゃいます)
import Foundation import UIKit func funcTest(_ sender: UIViewController) { } |
あとは、senderのtitleを取得すれば、値を取得できました。
import Foundation import UIKit func funcTest(_ sender: UIViewController) { let myTitle:String = sender.title! } |
<それでは、全体のコード例のまとめ>
全体のコードを再度書いておきたいと思います。
FirstViewController.swift
import UIKit class FirstViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //このタイトルを、他の場所でも取得したい。 self.title = “selftitle” //ここで、他のファイルにある「funcTest」を呼び出してみる funcTest(self) } |
testFile.swift
import Foundation import UIKit //UIViewControllerを使う時は、これが必要。 func funcTest(_ sender: UIViewController) { //ここでselfのtitleを使いたい let myTitle:String = sender.title! print(“title: \(myTitle) “) } |
長い間うまくできず、悩んだ末にやってみた方法なので、
間違いなど気づいた方がいらっしゃいましたら、
教えていただけるとありがたいです!