Comment pourrais-je diviser une chaîne sur plusieurs lignes comme ci-dessous?
var text:String = "This is some text
over multiple lines"
Comment pourrais-je diviser une chaîne sur plusieurs lignes comme ci-dessous?
var text:String = "This is some text
over multiple lines"
Réponses:
Swift 4 inclut la prise en charge des littéraux de chaîne multi-lignes . En plus des sauts de ligne, ils peuvent également contenir des citations non échappées.
var text = """
This is some text
over multiple lines
"""
Les versions plus anciennes de Swift ne vous permettent pas d'avoir un seul littéral sur plusieurs lignes mais vous pouvez ajouter des littéraux ensemble sur plusieurs lignes:
var text = "This is some text\n"
+ "over multiple lines\n"
\n
personnage. Par exemple, dans le REPL: println("foo\n" + "bar")
imprime foo
et bar
sur des lignes distinctes.
J'ai utilisé une extension sur String pour obtenir des chaînes multilignes tout en évitant le bug de blocage du compilateur. Il vous permet également de spécifier un séparateur afin que vous puissiez l'utiliser un peu comme la fonction de jointure de Python
extension String {
init(sep:String, _ lines:String...){
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!"
enumerate(lines)
est maintenantlines.enumerate()
joinWithSeparator
essentiellement la même chose? ["Hello", "World!"].joinWithSeparator(", ")
Ce fut la première chose décevante à propos de Swift que j'ai remarquée. Presque tous les langages de script permettent des 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 C simple et donc l'ancien C ++ et l'Objective-C permettent la concatentation 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 mettre sur des lignes différentes (mais vous devez ajouter vos propres nouvelles lignes):
const char* text = "This is some text\n"
"over multiple lines";
Comme swift ne sait pas que vous avez mis votre texte sur plusieurs lignes, je dois corriger l'échantillon de connor, de la même manière que mon échantillon C, en expliquant explicitement la nouvelle ligne:
var text:String = "This is some text \n" +
"over multiple lines"
Les chaînes multilignes sont possibles à partir de Swift 4.0, mais il existe certaines règles:
"""
."""
doit également commencer sur sa propre ligne.A part ça, vous êtes prêt à partir! Voici un exemple:
let longString = """
When you write a string 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 strings also let you write "quote marks"
freely inside your strings, which is great!
"""
Découvrez les nouveautés de Swift 4 pour plus d'informations.
Comme l'a souligné litso, l'utilisation répétée de +
-Operator dans une expression peut entraîner un blocage de XCode Beta (juste vérifié avec XCode 6 Beta 5): Xcode 6 Beta ne compile pas
Une alternative pour les chaînes multilignes pour l'instant consiste à utiliser un tableau de chaînes et reduce
cela 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"])
Swift 4 a résolu ce problème en prenant en charge le littéral de chaîne multi-lignes.Pour commencer le littéral de chaîne, ajoutez trois guillemets doubles ("" ") et appuyez sur la touche Retour, après avoir appuyé sur la touche Retour, commencez à écrire des chaînes avec des variables, des sauts de ligne et des guillemets doubles. comme si vous écriviez dans le bloc-notes ou dans n'importe quel éditeur de texte. Pour terminer à nouveau le littéral de chaîne de plusieurs lignes, écrivez ("" ") dans une nouvelle ligne.
Voir l'exemple ci-dessous
let multiLineStringLiteral = """
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(multiLineStringLiteral)
Rapide:
@connor est la bonne réponse, mais si vous souhaitez ajouter des lignes dans une déclaration d'impression, ce que vous recherchez est \n
et / ou \r
, ce sont des séquences d'échappement ou des caractères échappés, il s'agit d'un lien vers la documentation Apple sur le sujet. .
Exemple:
print("First line\nSecond Line\rThirdLine...")
En ajoutant à la réponse @Connor, il doit également y avoir \ n. Voici le code révisé:
var text:String = "This is some text \n" +
"over multiple lines"
L'exemple suivant illustre une continuation sur plusieurs lignes, 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 à résoudre dans un délai raisonnable et à envisager de la décomposer en plus petit pièces:
.
.
.
return String(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)
.
.
.
Échantillon
var yourString = "first line \n second line \n third line"
Dans le cas où vous ne trouvez pas l'opérateur + approprié
Une approche consiste à définir le texte de l'étiquette sur AttribedText et à mettre à jour la variable de chaîne pour inclure le code HTML pour le saut de ligne ( <br />
).
Par exemple:
var text:String = "This is some text<br />over multiple lines"
label.attributedText = text
Production:
This is some text
over multiple lines
J'espère que cela t'aides!
String
valeur (texte) à la NSAttributedString?
propriété (label.attributedText).
Voici un extrait de code pour diviser une chaîne par n caractères séparés sur des lignes:
//: A UIKit based Playground for presenting user interface
import UIKit
import PlaygroundSupport
class MyViewController : UIViewController {
override func loadView() {
let str = String(charsPerLine: 5, "Hello World!")
print(str) // "Hello\n Worl\nd!\n"
}
}
extension String {
init(charsPerLine:Int, _ str:String){
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 "Affichage texte". Son texte affiche automatiquement plusieurs lignes! Trouvé ici: UITextField plusieurs lignes