E 'un anti-pattern per le funzioni Swift che accettano in un mittente un'etichetta per quel parametro?

3

Questo è qualcosa che vedo in tutto Cocoa:

func someAction(_ sender: Any)

che è chiamato come:

someAction(someObject)

Questo può essere molto confuso per me. L'esempio infame è in NSView sottoclassi:

print("Hello, World!")

Nonostante sia la sintassi Swift standard per la stampa sulla console, in NSView , si aprirà la finestra di dialogo della stampante, sostenendo che il mittente è String "Hello, World!" . Quindi, nel mio codice ho iniziato a fare questo:

func someAction(sender: Any)

ma temo che il fatto di vedere nessuno di questo in Cocoa significhi che è un anti-modello. È questo il caso, o sono nella parte giusta?

    
posta Ben Leggiero 04.01.2017 - 14:42
fonte

1 risposta

4

No, non lo è. Probabilmente Pure Swift non usa _ , preferisce invece sender , o un'etichetta e quindi un nome di variabile. L'uso del _ su tutto il codice Swift tradotto da Cocoa è perché è proprio così che l'Obj-C viene tradotto in Swift 3 grazie a questo cambiamento. Swift 3 logico dietro la denominazione .

Forse, se stai lavorando a stretto contatto con Obj-C e / o Cocoa e vuoi mantenere invariate le tue convenzioni di denominazione, potresti usare _ , ma non è certamente necessario. Ecco qui un esempio direttamente dai documenti di Apple del codice Swift 3 accettabile che non usa il _ :

import UIKit

class MyViewController: UIViewController {
    let myButton = UIButton(frame: CGRect(x: 0, y: 0, width: 100, height: 50))

    override init?(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
        let action = #selector(MyViewController.tappedButton)
        myButton.addTarget(self, action: action, forControlEvents: .touchUpInside)
    }

    func tappedButton(sender: UIButton?) {
        print("tapped button")
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
    }
}
    
risposta data 04.01.2017 - 15:50
fonte

Leggi altre domande sui tag