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()が入っていると思うのですが、どういう理屈で実現されているのかが分かりません。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/28 05:59
2017/08/28 06:14
2017/09/10 14:20