아래와 같이 여러 줄로 문자열을 나눌 수 있습니까?
var text:String = "This is some text
over multiple lines"
아래와 같이 여러 줄로 문자열을 나눌 수 있습니까?
var text:String = "This is some text
over multiple lines"
답변:
Swift 4에는 여러 줄 문자열 리터럴 지원이 포함되어 있습니다. 줄 바꿈 외에도 이스케이프 처리되지 않은 따옴표가 포함될 수 있습니다.
var text = """
This is some text
over multiple lines
"""
이전 버전의 Swift에서는 여러 줄에 단일 리터럴을 사용할 수 없지만 여러 줄에 리터럴을 함께 추가 할 수 있습니다.
var text = "This is some text\n"
+ "over multiple lines\n"
\n
캐릭터 를 수동으로 추가해야 합니다. 예를 들어 REPL : println("foo\n" + "bar")
인쇄 foo
및 bar
별도의 줄에.
컴파일러에 매달려있는 버그를 피하면서 여러 줄 문자열을 달성하기 위해 String 확장을 사용했습니다. 또한 파이썬의 join 함수처럼 조금 사용할 수 있도록 구분 기호를 지정할 수 있습니다
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)
지금lines.enumerate()
joinWithSeparator
본질적으로 같은 일을하지 않습니까? ["Hello", "World!"].joinWithSeparator(", ")
이것은 내가 주목 한 Swift에 대한 첫 번째 실망스러운 일이었습니다. 거의 모든 스크립팅 언어는 여러 줄 문자열을 허용합니다.
C ++ 11은 원시 문자열 리터럴을 추가하여 은 고유 한 종결 정의
C #에는 여러 줄 문자열에 대한 @literals 가 있습니다.
일반 C와 구식 C ++ 및 Objective-C조차도 여러 리터럴을 인접한 곳에 두어 연결을 허용하므로 따옴표가 축소됩니다. 공백 문자는 그렇게 할 때 계산되지 않으므로 다른 줄에 넣을 수는 있지만 직접 줄 바꿈을 추가해야합니다.
const char* text = "This is some text\n"
"over multiple lines";
swift는 텍스트를 여러 줄에 넣었다는 것을 알지 못하므로 C 샘플과 마찬가지로 connor의 샘플을 수정하여 개행을 명시 적으로 설명해야합니다.
var text:String = "This is some text \n" +
"over multiple lines"
Swift 4.0부터 여러 줄 문자열이 가능하지만 몇 가지 규칙이 있습니다.
"""
."""
는 자체 라인에서 시작해야합니다.그 외에는 가도 좋습니다! 예를 들면 다음과 같습니다.
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!
"""
자세한 내용은 Swift 4의 새로운 기능 을 참조하십시오.
litso가 지적했듯이 +
한 표현식에서 -Operator를 반복해서 사용 하면 XCode Beta가 중단 될 수 있습니다 (XCode 6 Beta 5로 확인) .Xcode 6 Beta 컴파일되지 않음
현재 여러 줄 문자열의 대안은 reduce
다음과 함께 문자열 배열을 사용하는 것입니다 +
.
var text = ["This is some text ",
"over multiple lines"].reduce("", +)
또는 다음을 사용하여 더 간단합니다 join
.
var text = "".join(["This is some text ",
"over multiple lines"])
Swift 4는 멀티 라인 문자열 리터럴 지원을 제공하여이 문제를 해결했습니다. 메모장이나 텍스트 편집기로 작성하는 것과 같습니다. 여러 줄 문자열 리터럴을 다시 끝내려면 새 줄에 (”””)를 쓰십시오.
아래 예 참조
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)
빠른:
@connor가 정답이지만 원하는 것을 print 문에 행을 추가하려는 경우 is \n
및 / 또는 \r
이스케이프 시퀀스 또는 이스케이프 문자라고하며, 이 항목에 대한 Apple 설명서의 링크입니다. .
예:
print("First line\nSecond Line\rThirdLine...")
@Connor 답변에 추가하려면 \ n도 있어야합니다. 다음은 수정 된 코드입니다.
var text:String = "This is some text \n" +
"over multiple lines"
다음 예제는 Xcode 6.2 Beta에서 Swift 버그에 대한 간단한 해결 방법으로 괄호를 사용하여 여러 줄 연속을 보여줍니다. 여기서 표현이 너무 복잡하여 합리적인 시간 내에 해결하기가 어렵고 더 작은 것으로 세분화하는 것이 좋습니다 조각 :
.
.
.
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)
.
.
.
한 가지 방법은 레이블 텍스트를 duetText로 설정하고 줄 바꿈을위한 HTML을 포함하도록 문자열 변수를 업데이트하는 것입니다 (<br />
).
예를 들면 다음과 같습니다.
var text:String = "This is some text<br />over multiple lines"
label.attributedText = text
산출:
This is some text
over multiple lines
도움이 되었기를 바랍니다!
String
값 (텍스트)을 할당 할 수 없습니다 NSAttributedString?
.
다음은 문자열을 행으로 구분 된 n 개의 문자로 나누는 코드 스 니펫입니다.
//: 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
}
}
}
}
몇 가지 방법을 시도했지만 더 나은 해결책을 찾았습니다. "텍스트보기"요소 만 사용하십시오. 텍스트가 여러 줄로 자동 표시됩니다! 여기에서 찾을 수 있습니다 : UITextField 여러 줄