Comment pourrais-je fractionner une chaîne sur plusieurs lignes, comme ci-dessous?
var text:String = "This is some text
over multiple lines"
Swift 4 inclut la prise en charge de les littéraux de chaîne multiligne . En plus des nouvelles lignes, ils peuvent également contenir des guillemets 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 ajouter des littéraux sur plusieurs lignes:
var text = "This is some text\n"
+ "over multiple lines\n"
J'ai utilisé une extension sur String pour obtenir des chaînes multilignes tout en évitant le bogue bloquante du compilateur. Il vous permet également de spécifier un séparateur afin que vous puissiez l'utiliser un peu comme la fonction join 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!"
Ce fut la première chose décevante à propos de Swift que j'ai remarquée. Presque tous les langages de script autorisent les chaînes multilignes.
C++ 11 a ajouté des littéraux de chaîne bruts vous permettant de définir votre propre terminateur
C # a ses @literals pour les chaînes multilignes.
Même le langage C simple, et donc l'ancien C++ et l'Objective-C, permettent la concaténation en plaçant simplement plusieurs littéraux adjacents, afin que les guillemets soient réduits. Les espaces ne comptent pas lorsque vous faites cela, vous pouvez donc les placer sur différentes lignes (mais vous devez ajouter vos propres nouvelles lignes):
const char* text = "This is some text\n"
"over multiple lines";
Comme Swift ignore que vous avez mis votre texte sur plusieurs lignes, je dois corriger l’échantillon de connor, de la même manière que mon exemple C, indiquant explicitement le retour à la ligne:
var text:String = "This is some text \n" +
"over multiple lines"
Comme souligné par litso, l'utilisation répétée de +
- dans une expression peut conduire à une suspension de XCode Beta (juste vérifiée avec XCode 6 Beta 5): Xcode 6 Beta non compilé
Une alternative pour les chaînes multilignes consiste pour le moment à utiliser un tableau de chaînes et 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:
"""
."""
final doit également commencer sur sa propre ligne.En dehors de cela, 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!
"""
Voir les nouveautés de Swift 4 pour plus d'informations.
Swift 4 a résolu ce problème en offrant un support littéral sur plusieurs lignes. Pour commencer, ajoutez trois guillemets doubles ("" ") et appuyez sur la touche Retour. comme vous écrivez dans le bloc-notes ou n'importe quel éditeur de texte. Pour mettre fin aux littéraux de plusieurs lignes, écrivez à nouveau (”” ”) dans la nouvelle ligne.
Voir ci-dessous exemple
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 instruction print que vous recherchez est \n
et/ou \r
, elles sont appelées séquences d'échappement ou caractères échappés, il s'agit d'un lien vers la documentation Apple sur le site. sujet. .
Exemple:
print("First line\nSecond Line\rThirdLine...")
Pour ajouter à 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 décrit une continuation multiligne, utilisant des parenthèses comme une solution de contournement simple pour le bogue Swift à partir de la version bêta de Xcode 6.2, où il se plaint que l'expression est trop complexe pour être résolue dans un délai raisonnable et qu'il est envisagé de la décomposer en plusieurs 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)
.
.
.
Vous pouvez utiliser unicode égal à enter ou \n
et les implémenter dans votre chaîne. Par exemple: \u{0085}
.
Voici un extrait de code permettant de scinder une chaîne en 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 = 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
}
}
}
}
Une approche consiste à définir le texte de l'étiquette sur attributText et à mettre à jour la variable 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
Sortie:
This is some text
over multiple lines
J'espère que cela t'aides!
Échantillon
var yourString = "first line \n second line \n third line"
Au cas où vous ne trouvez pas l'opérateur + approprié
Une autre façon si vous voulez utiliser une variable chaîne avec du texte prédéfini,
var textFieldData:String = "John"
myTextField.text = NSString(format: "Hello User, \n %@",textFieldData) as String
myTextField.numberOfLines = 0