2017-08-12 7 views
3

Pour documenter Ruby, j'écrirais, par exemple, Time::now ou Time#day. Comment puis-je documenter Swift? C'est-à-dire, lors de la documentation de Swift, quelle est la notation pour un type et sa 1) propriété ou méthode de type ou 2) propriété ou méthode d'instance?Documentation rapide: instance/type propriété/notation de méthode

Par exemple, dans la documentation Ruby, le symbole :: (deux-points) désigne une propriété de classe ou une méthode, et le symbole # (signe dièse, hachage, hashtag, ou signe dièse) désigne une propriété d'instance ou d'une méthode. Par conséquent, Time::now signifie que now est une propriété de classe ou une méthode de Time et Time#day signifie que day est une propriété d'instance ou une méthode de Time.

La documentation de Swift a-t-elle une telle syntaxe de notation?

Je sais notation pour l'exemple de la fonction de documentation Swift, que la Swift append(_ newElement: Element) method for Array est documentée comme append(_:) -Parce que je vois de nombreux exemples de cette notation dans la documentation d'Apple. Mais, comment puis-je écrire Array#append(_:) pour Swift?

Répondre

2

Si vous vous posez des questions sur la documentation, je vous suggère de consulter Jazzy, un outil pour générer de la documentation à partir de vos commentaires de code en ligne. C'est une bonne façon de créer une documentation autonome à partir de vos commentaires de code et cela est cohérent avec les conventions d'Apple.

La convention de base utilisée est la suivante. Imaginons que vous avez une classe définie comme suit:

/// Some incredibly useful class 

public class MyClass { 

    /// Performs some foo-like operation 
    /// 
    /// - Parameter bar: The bar parameter. 

    public class func foo(_ bar: String) { 
     // do something 
    } 

    /// Some bazzy operation 
    /// 
    /// - Parameter qux: The bar parameter. 

    public func baz(_ quz: String) { 
     // do something 
    } 
} 

volonté Jazzy génère une documentation qui ressemble à:

enter image description here

Remarque, il est juste de vous montrer les étiquettes argument. Si vous appuyez sur un, il vous montre que ce soit une méthode de type et ce que les noms de paramètres sont les suivants:

enter image description here


Dans la question initiale, il n'a pas été clair, vous parliez de la documentation, je discuté des conventions que l'on rencontre dans le code. Cette réponse est ci-dessous.


Dans Swift, il est . pour les deux types d'instances et de propriété. C'est juste une question de ce qui précède .. S'il s'agit d'un type, c'est une propriété/méthode type. Considérez:

let b = Foo.bar 

Ce fait référence à la propriété de type bar pour le type Foo. Mais si ce qui précède . est une instance d'un type, alors vous avez affaire à une propriété/méthode d'instance.Tenir compte:

let b = Baz() 
let q = baz.qux 

Dans ce cas, qux fait référence à une propriété d'instance de Baz, parce b une instance du type Baz.


Au risque de brouiller les cartes, une mise en garde au schéma ci-dessus est l'utilisation des « sélectionneurs » (un motif Objective-C plus) à Swift. Dans ce cas, le choix de target indique ce que les références selector. Si vous fournissez une instance pour target, le selector fait référence à une méthode d'instance. Si vous fournissez un type pour le target, le selector fait référence à une méthode de type. Ainsi, dans cet exemple, le selector fait référence à une méthode d'instance:

Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(ViewController.foo), userInfo: nil, repeats: false) 

Alors que le suivant appellera une méthode de type:

Timer.scheduledTimer(timeInterval: 1, target: ViewController.self, selector: #selector(ViewController.foo), userInfo: nil, repeats: false) 

Note, dans les deux ces deux exemples, si nous sommes interagissant au sein d'une même classe, nous omettons généralement le nom de la classe. Vous devez seulement référencer explicitement le type si c'est dans une autre classe. Mais j'inclus ce motif target/selector simplement parce qu'il montre une autre syntaxe, légèrement différente, de la syntaxe Class.method.

Mais cette exception est unique. Le modèle général est xxx.yyy où si xxx est une instance d'un type, alors yyy est une propriété/méthode d'instance, alors que si xxx est le nom d'un type, alors yyy est une propriété de type/méthode.


Les références de append(_ newElement:) comme append(_:) est tout autre chose. C'est juste un cas où le premier paramètre, newElement n'a pas d'étiquette externe, donc il est appelé sans étiquette, par ex. array.append(object). Donc, append(_:) est juste une notation qui vous montre comment ça s'appelle (où nous ne nous soucions pas du nom du paramètre interne), mais append(_ newElement:) est comment il est mis en œuvre (où nous voulons savoir comment se référer à ce paramètre dans la méthode) .

+0

Eh bien, ce ne fut pas la réponse que je cherchais, mais je vous remercie pour la leçon de toute façon. :-) Je m'interroge sur la notation à des fins de documentation. J'ai mis à jour ma question pour le rendre plus clair. – ma11hew28

1

Malheureusement, Swift n'a pas de notation officielle ou largement acceptée pour distinguer les propriétés/méthodes de type et les propriétés/méthodes d'instance avec la forme préfixée du nom de type.

(Ainsi, les programmeurs habituels Swift (même d'experts) ne peut pas comprendre ce que vous demandez.)

Nom de type formulaire est préfixé effectivement utilisé dans le Swift book, mais pas si souvent.

Pour autant que je vérifié:

  • Dans certaines parties, propriété type est appelé sous une forme comme UInt32.max, mais comme vous le voyez cela est juste en utilisant la notation réelle valide comme expression Swift. Dans d'autres parties, la méthode de type s'appelle LevelTracker.unlock(_:), mais c'est aussi une expression valide dans Swift et je ne suis pas sûr qu'Apple l'utilise comme notation de documentation pour la méthode de type.Je ne peux pas trouver un exemple dans le livre Swift avec un coup d'œil, mais les initialiseurs sont souvent appelés sous une forme comme String.init(data:encoding:) et c'est aussi une expression valide dans Swift.

  • Pour d'autres cas, les méthodes d'instance ou les propriétés sont appelés instanceVar.methodName(_:) ou instanceVar.propertyName, bien sûr instanceVar apparaît dans un extrait de code à proximité et n'est pas un nom de type, c'est en fait pas ce que vous recherchez.

Et comme vous le savez, dans les références officielles d'Apple, les méthodes et propriétés sont indiquées par rubrique méthode d'instance, méthode de type, Instance Propriété ou Type de propriété. Ou préfixé avec class/static var/let, class/static func, var/let ou func.

Je ne peux pas trouver un exemple avec un sondage très court, mais certains articles (y compris Apple) peuvent faire référence à une méthode d'instance également sous la forme TypeName.methodName(_:) (ou propriété d'instance aussi). les membres de l'instance ne sont pas importants.

Je ne pouvais pas prendre beaucoup de temps, mais il semble qu'il est évident que

Swift n'a pas une notation pour distinguer les propriétés de type/méthodes et propriétés d'instance/méthodes avec la forme préfixée nom du type officiel ou largement acceptée.

Peut-être que vous avez besoin d'écrire quelque chose comme exemple méthodeArray.append(_:) pour représenter Array#append(_:).

(A noter, Array.append(_:) est également une expression valable dans Swift.)