質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1963閲覧

RefreshControlにおけるselectorで指定するメソッドの引数について

nakatsu6723

総合スコア38

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/08/27 13:01

swift

1override func viewDidLoad() { 2 super.viewDidLoad() 3 4 // Pull to Refreshコントロール初期化 5 let refreshControl = UIRefreshControl() 6 refreshControl.addTarget(self, action: #selector(ShopListViewController.onRefresh(_:)), for: .valueChanged) 7 self.tableView.addSubview(refreshControl) 8 } 9 10 11// ~~ 一部省略 ~~ 12 13func onRefresh(_ refreshControl: UIRefreshControl) { 14 // UIRefreshControlを読込中状態にする 15 refreshControl.beginRefreshing() 16 // 終了通知を受信したらUIRefreshControlを停止する 17 refreshObserver = NotificationCenter.default.addObserver(forName: .apiLoadComplete, object: nil, queue: nil, using: { 18 notification in 19 // 通知の待ち受けを終了 20 NotificationCenter.default.removeObserver(self.refreshObserver!) 21 // UIRefreshControlを停止する 22 refreshControl.endRefreshing() 23 }) 24 // 再取得 25 yls.loadData(reset: true) 26 }

上記はPull to Refreshの機能を追加しているコードだそうです。
ここで初期化する段階で
refreshControl.addTarget(self, action: #selector(ShopListViewController.onRefresh(:)), for: .valueChanged)
の#selectorで指定しているメソッドonRefresh(
:)は引数一つの関数と宣言しているだけですよね?
関数の宣言を見ると、
func onRefresh(_ refreshControl: UIRefreshControl)
としてrefreshControlを引数として宣言しています。
この引数として与えられているrefreshControlはどこで何を渡されているのでしょうか?
挙動を見るにviewDidLoadのlet refreshControl = UIRefreshControl()が入っていると思うのですが、どういう理屈で実現されているのかが分かりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

どういう理屈で実現されているのかが分かりません

の回答になっていないかも知れませんが、

  1. addTarget(_:action:for:)で、.valueChangedが発生した時に呼ぶ関数onRefresh(_:)を登録。
  2. .valueChangedが発生すると、発生源となったUIRefreshControlのインスタンスを引数としてonRefresh(_:)が呼ばれる。

という流れです。

投稿2017/08/28 00:44

fuzzball

総合スコア16731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nakatsu6723

2017/08/28 05:59

ご回答ありがとうございます。 func onRefresh(_ refreshControl: UIRefreshControl)のrefreshControlにrefreshControl.addTargetのrefreshControlが入るのは、addTargetのそういった仕様だという理解で大丈夫ですか?
fuzzball

2017/08/28 06:14

そうですね。UIControlの仕様と言った方がいいかも知れません。
nakatsu6723

2017/09/10 14:20

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問