печать без новой строки в Swift
в swift 2.0,print() автоматически добавляет символ новой строки. В swift 1.2,println() и print() раньше были отдельные функции. Итак, как я могу распечатать текст и не добавлять к нему новую строку, поскольку swift больше не имеет функции печати, которая не добавляет новые строки.
4 ответов:
сигнатура метода для печати выглядит примерно так,
public func print<Target>(_ items: Any..., separator: String = default, terminator: String = default, to output: inout Target) where Target : TextOutputStreamи вот некоторые usecases,
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 { .city }.joined(separator: ",") return String(format: "<name: \(name), addresses: \(addressString) %p>",objectAddress) } }сейчас, с lldb, вы можете использовать РО команда и он будет печатать объект, как это в 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 finallyCustomReflectable
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"
в 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"
Если вы хотите ту же строку в цикле:
for i in 1...4 { print("", i, separator: " ", terminator:"") } print()выход: 1 2 3 4
Comments