দ্রুতগতিতে নিউলাইন ছাড়াই মুদ্রণ করুন


110

সুইফট ২.০-এ, print()স্বয়ংক্রিয়ভাবে একটি নতুন লাইনের চরিত্র যুক্ত হয়। দ্রুত 1.2 এ, println()এবং print()পৃথক ফাংশন হতে ব্যবহৃত। সুতরাং আমি কীভাবে কিছু পাঠ্য মুদ্রণ করব এবং এতে কোনও নতুন লাইন যুক্ত করব না কারণ সুইফ্টের আর মুদ্রণ ফাংশন নেই যা নিউলাইনগুলিকে সংযুক্ত করে না।



3
@ ডানিয়েলনাগি এটি কোনও সদৃশ নয় কারণ সুইফট ২.০ এর একটি প্রিন্টলন ফাংশন নেই। কনসোলে কীভাবে মুদ্রণ করবেন তা আমি জিজ্ঞাসা করছি না কারণ মুদ্রণ ফাংশন এটি করবে। আমি জিজ্ঞাসা করছি "ইনপুট পাঠ্যের সাথে সংযুক্ত নতুন লাইন ছাড়া কনসোলে কীভাবে প্রিন্ট করবেন"
অঙ্কিত গোয়েল

2
এটি এক্সকোড 7 বিটা রিলিজ নোটগুলিতে স্পষ্টতই নথিভুক্ত করা হয়েছে
মার্টিন আর

উত্তর:


208

সুইফট ২.০ থেকে শুরু করে, নতুন লাইন ছাড়াই মুদ্রণের প্রস্তাবিত পদ্ধতিটি হ'ল:

print("Hello", terminator:"")

যদিও আপনি কেবলমাত্র seperatorপ্যারামিটারের সাথে ইন্টারফেসটি দেখেন । আপনি এটি func print(items: Any..., separator: String = default, terminator: String = default)
এড়াতে

2
সুইফ্ট ডক্সে কোথায় কেউ defaultসমান কি তা জানতে পারে?
7stud

1
@ 7stud defaultএকটি ডিফল্ট মানের জন্য একটি স্থানধারক। আদর্শভাবে, ডকুমেন্টেশনে কোনও স্থানধারক নয়, আসল মান থাকা উচিত।
সুলতান

1
ডিফল্ট মানগুলি হ'ল বিভাজক "" (একক স্থান) এবং টার্মিনেটর \ n (নতুন লাইন)
সেলভা

68

printসুইফ্টের দেরি সংশোধন করার পরে ফাংশনটি সম্পূর্ণ পরিবর্তিত হয়েছে , এখন এটি অনেক সহজ দেখাচ্ছে এবং স্ট্যান্ডার্ড কনসোলে মুদ্রণের পদ্ধতিতে ভিন্নতা রয়েছে।

মুদ্রণের জন্য পদ্ধতিটির স্বাক্ষরটি এরকম কিছু দেখাচ্ছে,

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.

concatenating

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

ছাপে:

This is wild world

সুতরাং, টার্মিনেটর ব্যবহার করে, আপনার সাবধান হওয়া উচিত যে বিষয়বস্তুগুলি একই লাইনের সাথে প্রাসঙ্গিক।

কাস্টমস্ট্রিং কনভার্টেবলের সাথে মুদ্রণ অবজেক্ট

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>

টেক্সটআউটপুট স্ট্রিম ব্যবহার করে ফাইলে লগইন করা হচ্ছে

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("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 person

ফলাফলটি এমন কিছু হবে,

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

এছাড়াও এক্সকোড 7 বিটা 4 এ আমার জন্য কাজ করছে না। কলিং print("foo", appendNewLine: false)সংকলন করে তবে আউটপুট হয় (foo), falseএবং একটি নতুন লাইন যেভাবেই সংযুক্ত করা হয়!
mluisbrown

@ এম্লুয়াসব্রাউন এটি appendNewline(লোয়ার কেস l)
জেরেমিপি

11

সুইফট ২.০ এ আপনি এটি করতে পারেন:

বেসিক সংস্করণ

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"

ডিফল্টরূপে বিভাজক একটি স্থান" "
জয়রাম কুমার

4

আপনি যদি লুপটিতে একই লাইনটি চান:

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

আউটপুট: 1 2 3 4

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.