कैसे मैं नीचे के रूप में कई लाइनों पर एक स्ट्रिंग विभाजित कर सकता है?
var text:String = "This is some text
over multiple lines"
कैसे मैं नीचे के रूप में कई लाइनों पर एक स्ट्रिंग विभाजित कर सकता है?
var text:String = "This is some text
over multiple lines"
जवाबों:
स्विफ्ट 4 में मल्टी-लाइन स्ट्रिंग शाब्दिक के लिए समर्थन शामिल है । नई सुर्खियों के अलावा वे अनपेक्षित उद्धरण भी शामिल कर सकते हैं।
var text = """
This is some text
over multiple lines
"""
स्विफ्ट के पुराने संस्करण आपको कई लाइनों में एक ही शाब्दिक की अनुमति नहीं देते हैं, लेकिन आप कई लाइनों में एक साथ शाब्दिक जोड़ सकते हैं:
var text = "This is some text\n"
+ "over multiple lines\n"
\n
चरित्र को मैन्युअल रूप से जोड़ना होगा । उदाहरण के लिए, REPL में: println("foo\n" + "bar")
प्रिंट foo
और bar
अलग-अलग लाइनों पर।
कंपाइलर हैंगिंग बग से बचने के लिए मैंने मल्टीलाइन स्ट्रिंग्स प्राप्त करने के लिए स्ट्रिंग पर एक एक्सटेंशन का उपयोग किया। यह आपको एक विभाजक निर्दिष्ट करने की भी अनुमति देता है ताकि आप इसे थोड़ा सा उपयोग कर सकें जैसे कि पायथन के जॉइन फंक्शन
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(", ")
स्विफ्ट के बारे में यह पहली निराशाजनक बात थी जिस पर मैंने गौर किया। लगभग सभी स्क्रिप्टिंग भाषाएँ मल्टी-लाइन स्ट्रिंग्स के लिए अनुमति देती हैं।
C ++ 11 ने कच्चे स्ट्रिंग शाब्दिक जोड़े जो आपको अपने स्वयं के टर्मिनेटर को परिभाषित करने की अनुमति देते हैं
मल्टी लाइन स्ट्रिंग्स के लिए C # में इसके @ लीटरल्स हैं।
यहां तक कि सादा सी और इस तरह पुराने जमाने के सी ++ और ऑब्जेक्टिव-सी समवर्ती कई शाब्दिक शब्दों को लगाकर सहमति के लिए अनुमति देते हैं, इसलिए उद्धरण ढह जाते हैं। जब आप ऐसा करते हैं तो व्हॉट्सएप की गिनती नहीं होती है, इसलिए आप उन्हें अलग-अलग पंक्तियों में रख सकते हैं (लेकिन अपनी खुद की नई सूची जोड़ने की आवश्यकता है):
const char* text = "This is some text\n"
"over multiple lines";
जैसा कि स्विफ्ट को नहीं पता है कि आपने अपना पाठ कई लाइनों पर रखा है, मुझे कॉनर का नमूना ठीक करना है, मेरे सी नमूने के समान, नई पंक्ति को बताते हुए:
var text:String = "This is some text \n" +
"over multiple lines"
मल्टी-लाइन स्ट्रिंग्स स्विफ्ट 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!
"""
अधिक जानकारी के लिए देखें स्विफ्ट 4 में क्या नया है ।
जैसा कि +
लिटूस द्वारा बताया गया है, एक अभिव्यक्ति में बार-बार इस्तेमाल होने वाले 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"])
स्विफ्ट 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 सही उत्तर है, लेकिन यदि आप एक प्रिंट स्टेटमेंट में लाइनें जोड़ना चाहते हैं जो आप देख रहे हैं \n
और / या \r
, इन्हें एस्केप सीक्वेंस या एस्केप्ड कैरेक्टर कहा जाता है, तो यह विषय पर Apple प्रलेखन की एक कड़ी है।।
उदाहरण:
print("First line\nSecond Line\rThirdLine...")
@ उत्तर में जोड़कर, वहाँ भी \ n होना चाहिए। यहाँ संशोधित कोड है:
var text:String = "This is some text \n" +
"over multiple lines"
निम्न उदाहरण में एक बहु-लाइन निरंतरता को दर्शाया गया है, जो स्विफ्ट बग के लिए एक्सोड 6.2 बीटा के रूप में एक साधारण वर्कअराउंड के रूप में कोष्ठक का उपयोग करता है, जहां यह शिकायत करता है कि अभिव्यक्ति उचित मात्रा में समय पर हल करने के लिए बहुत जटिल है, और इसे छोटा करने पर विचार करने के लिए। टुकड़े:
.
.
.
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)
.
.
.
नमूना
var yourString = "first line \n second line \n third line"
मामले में, आप + ऑपरेटर को उपयुक्त नहीं पाते हैं
एक दृष्टिकोण एक्टीवेटेड टेक्स्ट लेबल को सेट करना है और लाइन ब्रेक के लिए 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 कई लाइनें