신속하게 줄 바꿈없이 인쇄


110

swift 2.0에서는 print()자동으로 개행 문자를 추가합니다. 신속한 1.2, println()print()개별 기능 사용. 그래서 swift는 더 이상 줄 바꿈을 추가하지 않는 인쇄 기능이 없기 때문에 텍스트를 인쇄하고 줄 바꿈을 추가하지 않는 방법은 무엇입니까?



3
@ DánielNagy Swift 2.0에는 println 함수가 없기 때문에 중복되지 않습니다. 인쇄 기능이 그렇게 할 것이기 때문에 콘솔에 인쇄하는 방법을 묻지 않습니다. 나는 "어떻게 입력 텍스트에 추가 된 줄 바꿈하지 않고 콘솔에 인쇄"요구하고
ANKIT 고엘

2
이것은 Xcode 7 베타 릴리스 노트에 명시 적으로 문서화되어 있습니다. "println 및 print는 기본 인수를 사용하여 단일 인쇄 함수로 병합되었습니다 ..."
Martin R

답변:


208

Swift 2.0부터 개행없이 인쇄하는 권장 방법은 다음과 같습니다.

print("Hello", terminator:"")

seperator매개 변수가 있는 인터페이스 만 볼 수 있지만 . 기본값이 있으므로 무시해도됩니다func print(items: Any..., separator: String = default, terminator: String = default)
Binarian

2
Swift 문서에서 누군가 default가 무엇이 같은지 알 수 있습니까?
7stud

1
@ 7stud default는 기본값에 대한 자리 표시 자입니다. 이상적으로는 문서에 자리 표시자가 아닌 실제 값이 포함되어야합니다.
Sulthan

1
기본값은 다음과 같습니다. 구분 기호 ""(단일 공백) 및 종결 자 \ n (새 줄)
selva

68

print기능은 Swift 의 후반 개정 이후 완전히 변경 되었으므로 이제 훨씬 간단 해 보이며 표준 콘솔에 인쇄 할 수있는 다양한 방법이 있습니다.

인쇄를위한 메서드 서명은 다음과 같습니다.

public func print<Target>(_ items: Any..., separator: String = default, terminator: String = default, to output: inout Target) where Target : TextOutputStream

여기 몇 가지 사용 사례가 있습니다.

print("Swift is awesome.")
print("Swift", "is", "awesome", separator:" ")
print("Swift", "is", "awesome", separator:" ", terminator:".")

인쇄물:

Swift is awesome.
Swift is awesome
Swift is awesome.

연결

print("This is wild", terminator: " ")
print("world")

인쇄물:

This is wild world

따라서 터미네이터를 사용하면 내용이 같은 줄과 관련이 있는지주의해야합니다.

CustomStringConvertible로 개체 인쇄

struct Address {
  let city: String
}

class Person {
  let name = "Jack"
  let addresses = [
    Address(city: "Helsinki"),
    Address(city: "Tampere")
  ]
}

extension Person: CustomStringConvertible {
  var description: String {
    let objectAddress = unsafeBitCast(self, to: Int.self)
    return String(format: "<name: \(name) %p>", objectAddress)
  }
}

let jack = Person()
print(jack)

인쇄물:

<name: Jack 0x608000041c20>

CustomDebugStringConvertible

extension Person: CustomDebugStringConvertible {
  var debugDescription: String {
    let objectAddress = unsafeBitCast(self, to: Int.self)

    let addressString = addresses.map { $0.city }.joined(separator: ",")
    return String(format: "<name: \(name), addresses: \(addressString) %p>",objectAddress)
  }
}

이제 lldb 를 사용하면 po 명령을 사용할 수 있으며 lldb 콘솔에서 다음과 같이 개체를 인쇄합니다.

<name: Jack, addresses: Helsinki,Tampere 0x60c000044860>

TextOutputStream을 사용하여 파일에 로깅

struct MyStreamer: TextOutputStream {

  lazy var fileHandle: FileHandle? = {
    let fileHandle = FileHandle(forWritingAtPath: self.logPath)
    return fileHandle
  }()

  var logPath: String = "My file path"

  mutating func write(_ string: String) {
    fileHandle?.seekToEndOfFile()
    fileHandle?.write(string.data(using:.utf8)!)
  }
}

이제 print to stream을 사용하여

print("First of all", to: &myStream )
print("Then after", to: &myStream)
print("And, finally", to: &myStream)

파일로 인쇄 :

First of all
Then after
And finally

CustomReflectable

extension Person: CustomReflectable {
  var customMirror: Mirror {
    return Mirror(self, children: ["name": name, "address1": addresses[0], "address2": addresses[1]])
  }
}

이제 lldb 디버거에서 po 명령을 사용하면

> po person

결과는 다음과 같습니다.

<name: Jack, addresses: Tampere Helsinki  0x7feb82f26e80>
  - name : "Jack"
  ▿ address1 : Address
    - city : "Helsinki"
  ▿ address2 : Address
    - city : "Tampere"

또한 Xcode 7beta4에서 나를 위해 작동하지 않습니다. 호출은 print("foo", appendNewLine: false)컴파일되지만 출력은 계속 (foo), false되고 어쨌든 새 줄이 추가됩니다!
mluisbrown 2015-08-05

그것의 @mluisbrown appendNewline(소문자 l)
JeremyP

11

Swift 2.0에서는 다음을 수행 할 수 있습니다.

기본 버전

print("Hello World")
result "Hello World\n"

종결 자 사용

print("Hello World", terminator:"")
result "Hello World"

구분 기호 사용

print("Hello", "World", separator:" ")
result "Hello World\n"

구분자 및 종결 자 사용

print("Hello", "World", separator:" ", terminator:"")
result "Hello World"

하나의 변수 사용

var helloworld = "Hello World"
print(helloworld)
result "Hello World\n"

두 개의 변수 사용

var hello = "Hello"
var world = "World"
print (hello, world)
result "Hello World\n"

기본적으로 구분자는 공백입니다" "
Jayram 쿠마

4

루프에서 동일한 라인을 원하는 경우 :

for i in 1...4
{
    print("", i, separator: " ", terminator:"")
}
print()

출력 : 12 34

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.