programing

Swift - 문자열을 여러 줄로 분할합니다.

lastcode 2023. 4. 12. 22:25
반응형

Swift - 문자열을 여러 줄로 분할합니다.

다음과 같이 문자열을 여러 줄로 분할하려면 어떻게 해야 합니까?

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"

String의 확장자를 사용하여 컴파일러의 행잉 버그를 회피하면서 여러 줄의 스트링을 실현했습니다.또한 구분자를 지정하여 Python의 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!"

이것이 스위프트에 대한 첫 번째 실망스러운 점이었다.거의 모든 스크립트 언어에서 여러 줄 문자열을 사용할 수 있습니다.

C++11에 자체 터미네이터를 정의할 수 있는 미가공 문자열 리터럴이 추가되었습니다.

C#에는 여러 줄 문자열의 @literal이 있습니다.

플레인 C, 즉 구식 C++ 및 Objective-C에서도 여러 리터럴을 인접시키는 것만으로 합치화가 가능하기 때문에 따옴표는 축소됩니다.이 경우 공백은 계산되지 않으므로 다른 행에 넣을 수 있습니다(단, 새 행을 추가해야 합니다).

const char* text = "This is some text\n"
                   "over multiple lines";

Swift는 당신이 텍스트를 여러 줄에 걸쳐 쓴 것을 모르기 때문에, 나는 C 샘플과 마찬가지로 코너의 샘플을 수정해야 하며, 새로운 줄을 자세히 기술해야 합니다.

var text:String = "This is some text \n" +
                  "over multiple lines"

Swift 4.0에서는 여러 줄의 스트링이 가능하지만 몇 가지 규칙이 있습니다.

  1. 스트링의 시작과 끝은 큰따옴표로 세 개 묶어야 합니다.""".
  2. 문자열 내용은 자체 행에서 시작해야 합니다.
  3. 종료하는 것"""또한 자체 행에서 시작해야 합니다.

그것 말고는 가도 돼!다음은 예를 제시하겠습니다.

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에 의해 지적된 바와 같이, 의 반복적인 사용+- 오퍼레이터가 1개의 식으로 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는 다중 행 문자열 리터럴을 지원함으로써 이 문제를 해결했습니다.문자열 리터럴을 시작하려면 큰따옴표("")를 3개 추가하고 리턴 키를 누른 후 메모장이나 텍스트에디터에 쓰는 것과 마찬가지로 변수, 줄 바꿈 및 큰따옴표를 사용하여 문자열 쓰기를 시작합니다.다중 행 문자열 리터럴을 다시 끝내려면 새 행에 ""를 입력하십시오.

아래 예 참조

     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)

신속:

정답이지만, @는 @는 @는 ㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴㄴ다이다.\n "/"/"\r이것들은 이스케이프 시퀀스 또는 이스케이프 문자라고 불리며, 토픽에 관한 Apple 문서로의 링크입니다.

예:

print("First line\nSecond Line\rThirdLine...")

@Connor answer에 \n도 추가되어야 합니다.수정된 코드는 다음과 같습니다.

var text:String = "This is some text \n" +
                  "over multiple lines"

다음 예시는 Xcode 6.2 베타 시점에서 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)
    .
    .
    .

내가 쓴 작은 확장자.

extension String {

    init(swiftLintMultiline strings: String...) {
        self = strings.reduce("", +)
    }
}

다음과 같이 사용할 수 있습니다.

String(swiftLintMultiline:
    "Lorem ipsum dolor sit amet, consectetur adipiscing",
    "elit. Ut vulputate ultrices volutpat. Vivamus eget",
    "nunc maximus, tempus neque vel, suscipit velit.",
    "Quisque quam quam, malesuada et accumsan sodales,",
    "rutrum non odio. Praesent a est porta, hendrerit",
    "lectus scelerisque, pharetra magna. Proin id nulla",
    "pharetra, lobortis ipsum sit amet, vehicula elit. Nulla",
    "dapibus ipsum ipsum, sit amet congue arcu efficitur ac. Nunc imperdi"
)

또한 문자열 변수를 사전 정의된 텍스트와 함께 사용할 경우,

var textFieldData:String = "John"
myTextField.text = NSString(format: "Hello User, \n %@",textFieldData) as String
myTextField.numberOfLines = 0

는 unicode equals 또는 unicode equals로 할 수 .\n스트링 안에 구현합니다.를 들면, '먹다'와 같이요.\u{0085}.

샘플

var yourString = "first line \n second line \n third line"

+ 연산자가 적합하지 않은 경우

텍스트를 attributed로 입니다.바꿈용 ('')을를 텍스트화하고 합니다.<br />를 참조해 주세요.

예를 들어 다음과 같습니다.

var text:String = "This is some text<br />over multiple lines"
label.attributedText = text

출력:

This is some text
over multiple lines

이게 도움이 됐으면 좋겠네요!

다음 코드 조각은 문자열을 줄에 걸쳐 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
            }
        }

    }
}

다음은 resultBuilder를 사용한 간단한 구현(Swift 5.4+)을 보여드리겠습니다.

@resultBuilder
public struct StringBuilder {
    public static func buildBlock(_ components: String...) -> String {
        return components.reduce("", +)
    }
}

public extension String {
    init(@StringBuilder _ builder: () -> String) {
        self.init(builder())
    }
}

사용방법:

String {
    "Hello "
    "world!"
} 
// "Hello world!"

몇 가지 방법을 시도했지만 더 나은 해결책을 찾았습니다."텍스트 보기" 요소를 사용하십시오.텍스트가 자동으로 여러 줄로 표시됩니다.검색 결과: UITextField의 여러

언급URL : https://stackoverflow.com/questions/24091233/swift-split-string-over-multiple-lines

반응형