Comment pourrais-je diviser une chaîne sur plusieurs lignes, comme ci-dessous?
var text:Ssortingng = "This is some text over multiple lines"
Swift 4 prend en charge les littéraux de chaîne multi-lignes . En plus des nouvelles lignes, ils peuvent également contenir des devis non échappés.
var text = """ This is some text over multiple lines """
Les anciennes versions de Swift ne vous permettent pas d’avoir un seul littéral sur plusieurs lignes, mais vous pouvez append des littéraux sur plusieurs lignes:
var text = "This is some text\n" + "over multiple lines\n"
J’ai utilisé une extension sur Ssortingng pour obtenir des chaînes multilignes tout en évitant le bogue de suspension du compilateur. Il vous permet également de spécifier un séparateur afin de pouvoir l’utiliser un peu comme la fonction de jointure de Python
extension Ssortingng { init(sep:Ssortingng, _ lines:Ssortingng...){ self = "" for (idx, item) in lines.enumerated() { self += "\(item)" if idx < lines.count-1 { self += sep } } } init(_ lines:String...){ self = "" for (idx, item) in lines.enumerated() { self += "\(item)" if idx < lines.count-1 { self += "\n" } } } } print( String( "Hello", "World!" ) ) "Hello World!" print( String(sep:", ", "Hello", "World!" ) ) "Hello, World!"
C’était la première chose décevante à propos de Swift que j’ai remarquée. Presque tous les langages de script autorisent les chaînes multi-lignes.
C ++ 11 a ajouté des littéraux de chaîne bruts qui vous permettent de définir votre propre terminateur
C # a ses @literals pour les chaînes multi-lignes.
Même le simple C et donc le C ++ et l’Objective-C à l’ancienne permettent la concaténation simplement en mettant plusieurs littéraux adjacents, de sorte que les guillemets sont réduits. Les espaces ne comptent pas lorsque vous faites cela, vous pouvez donc les placer sur des lignes différentes (mais vous devez append vos propres lignes):
const char* text = "This is some text\n" "over multiple lines";
Comme swift ne sait pas que vous avez placé votre texte sur plusieurs lignes, je dois corriger l’exemple de connor, comme mon échantillon C, en indiquant explicitement la nouvelle ligne:
var text:Ssortingng = "This is some text \n" + "over multiple lines"
Comme l’a souligné litso, l’utilisation répétée de +
-Operator dans une expression peut entraîner la suspension de XCode Beta (vérifiée avec XCode 6 Beta 5): Xcode 6 Beta ne comstack pas
Une alternative pour les chaînes multilignes pour le moment est d’utiliser un tableau de chaînes et de le reduce
avec +
:
var text = ["This is some text ", "over multiple lines"].reduce("", +)
Ou, sans doute plus simple, en utilisant join
:
var text = "".join(["This is some text ", "over multiple lines"])
Les chaînes multi-lignes sont possibles à partir de Swift 4.0, mais il existe quelques règles:
"""
. """
devrait également commencer sur sa propre ligne. A part ça, vous êtes prêt à partir! Voici un exemple:
let longSsortingng = """ When you write a ssortingng that spans multiple lines make sure you start its content on a line all of its own, and end it with three quotes also on a line of their own. Multi-line ssortingngs also let you write "quote marks" freely inside your ssortingngs, which is great! """
Découvrez les nouveautés de Swift 4 pour plus d’informations.
Swift 4 a résolu ce problème en donnant un support littéral à plusieurs lignes. Pour commencer une chaîne littérale, ajoutez trois guillemets (”” ”) et appuyez sur la touche retour. Après avoir appuyé sur la touche retour, écrivez des chaînes avec des variables, des sauts de ligne et des guillemets comme vous écrivez dans le bloc-notes ou n’importe quel éditeur de texte. Pour terminer le littéral de chaîne multi-lignes, écrivez à nouveau (”” ”) dans une nouvelle ligne.
Voir ci-dessous exemple
let multiLineSsortingngLiteral = """ This is one of the best feature add in Swift 4 It let's you write “Double Quotes” without any escaping and new lines without need of “\n” """ print(multiLineSsortingngLiteral)
Rapide:
@connor est la bonne réponse, mais si vous voulez append des lignes dans un relevé d’impression, ce que vous cherchez est \n
et / ou \r
, elles s’appellent des séquences d’échappement ou des caractères échappés. sujet. .
Exemple:
print("First line\nSecond Line\rThirdLine...")
En ajoutant à la réponse de @Connor, il doit y avoir \ n aussi. Voici le code révisé:
var text:Ssortingng = "This is some text \n" + "over multiple lines"
L’exemple suivant décrit une continuation multi-ligne, en utilisant des parenthèses comme solution de contournement simple pour le bogue Swift à partir de Xcode 6.2 Beta, où il se plaint que l’expression est trop complexe pour être résolue dans un délai raisonnable, et pièces:
. . . return Ssortingng(format:"\n" + (" part1: %d\n" + " part2: %d\n" + " part3: \"%@\"\n" + " part4: \"%@\"\n" + " part5: \"%@\"\n" + " part6: \"%@\"\n") + (" part7: \"%@\"\n" + " part8: \"%@\"\n" + " part9: \"%@\"\n" + " part10: \"%@\"\n" + " part12: \"%@\"\n") + " part13: %f\n" + " part14: %f\n\n", part1, part2, part3, part4, part5, part6, part7, part8, part9, part10, part11, part12, part13, part14) . . .
Une autre façon si vous voulez utiliser une variable de chaîne avec un texte prédéfini,
var textFieldData:Ssortingng = "John" myTextField.text = NSSsortingng(format: "Hello User, \n %@",textFieldData) as Ssortingng myTextField.numberOfLines = 0
Vous pouvez utiliser unicode égal à enter ou \n
et les implémenter dans votre chaîne. Par exemple: \u{0085}
.
Échantillon
var yourSsortingng = "first line \n second line \n third line"
Dans le cas où vous ne trouvez pas l’opérateur + approprié
L’une des méthodes consiste à définir le texte de l’étiquette sur atsortingbutsText et à mettre à jour la variable de chaîne pour inclure le code HTML pour le saut de ligne (
).
Par exemple:
var text:Ssortingng = "This is some text
over multiple lines" label.atsortingbutedText = text
Sortie:
This is some text over multiple lines
J’espère que cela t’aides!
Voici un extrait de code permettant de diviser une chaîne par n caractères séparés par des lignes:
//: A UIKit based Playground for presenting user interface import UIKit import PlaygroundSupport class MyViewController : UIViewController { override func loadView() { let str = Ssortingng(charsPerLine: 5, "Hello World!") print(str) // "Hello\n Worl\nd!\n" } } extension Ssortingng { init(charsPerLine:Int, _ str:Ssortingng){ self = "" var idx = 0 for char in str { self += "\(char)" idx = idx + 1 if idx == charsPerLine { self += "\n" idx = 0 } } } }
J’ai essayé plusieurs façons, mais j’ai trouvé une solution encore meilleure: utilisez simplement un élément “Vue de texte”. Son texte apparaît automatiquement sur plusieurs lignes! Trouvé ici: UITextField lignes multiples