web-dev-qa-db-ja.com

swift performSegueWithIdentifier送信者値

セグエで送信者の値がどのように機能するかを理解しようとしています。

私のコードのいくつかの場所では、両方が機能します:

performSegueWithIdentifier("mySegue", sender: self)

performSegueWithIdentifier("mySegue", sender: sender)

しかし、自己/送信者を持つことの違いは何ですか?

7
Kiwo Tew

@ iosDev82が彼の回答で述べているように、送信者は、セグエをトリガーしたオブジェクト(存在する場合)に名前を付けるオプションです。

ビューコントローラーのコードを介してセグエをトリガーする場合は、ビューコントローラー(自己)を渡すか、nilを渡すことができます。これは、prepareForSegueに渡される情報の一部にすぎません(iOSDv82が言うように)。

IBActionメソッドのコードでセグエをトリガーすると、IBActionに独自の送信者パラメーター(多くの場合ボタン)が含まれる場合があります。その場合、送信者パラメーターをperformSegueWithIdentifierメソッドに渡すことができます。

例:

@IBAction func buttonAction(sender: UIButton)
{
  //In this case the button IBAction takes a pointer to the button as a param.
  //Pass it on to the segue in case performWithSegue needs it. 
  self.performSegueWithIdentifier("someID", sender: sender)
}
15
Duncan C

senderは、この関数とともに渡される単なる引数です。

これは、後で関数prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!)で受信されます。ここで、このオブジェクトを取得し、送信者が誰であるかに基づいて決定を下すことができます。

例として、IndexPathで何かを編集するとします。あなたが呼ぶ

performSegue(withIdentifier: "showItem", sender: indexPath)

どこからでも(indexPathはタイプIndexPathここにあります)。

次に、prepare(segue:sender:)内で、次のことを行います。

...
switch segue.identifier {
case "showItem"?:
     // Figure out which row was just tapped
     if let row = tableView.indexPathForSelectedRow?.row {
         editRow(segue, row)
     } else {
         let selectedIndexPath = sender as! IndexPath
         editRow(segue, selectedIndexPath.row)
     }
...
0
nyxee