फ़ंक्शन उदाहरण में, (पढ़ें | लिखो) DocumentsFromFile (...) कुछ फ़ंक्शन रैपर होने से निश्चित रूप से समझ में आता है क्योंकि OSx और iOS में सब कुछ तीन या चार प्रमुख वर्गों की आवश्यकता लगती है त्वरित और संपत्तियों का एक गुच्छा, कॉन्फ़िगर, लिंक, उदाहरण त्वरित, और सेट, केवल 182 देशों में, एक फ़ाइल में "हाय" लिखने के लिए।
हालाँकि, ये उदाहरण वास्तविक प्रोग्राम में उपयोग करने के लिए पर्याप्त नहीं हैं। लिखने का कार्य फ़ाइल को बनाने या लिखने में किसी भी त्रुटि की रिपोर्ट नहीं करता है। पढ़ने पर, मुझे नहीं लगता कि एक त्रुटि को वापस करने के लिए यह एक अच्छा विचार है कि फ़ाइल उस स्ट्रिंग के रूप में मौजूद नहीं है जो उस डेटा को पढ़ने के लिए माना जाता है जो इसमें है। आप जानना चाहेंगे कि यह विफल हो गया और क्यों, कुछ अधिसूचना तंत्र के माध्यम से, एक अपवाद की तरह। फिर, आप कुछ कोड लिख सकते हैं जो कि आउटपुट समस्या है और उपयोगकर्ता को इसे सही करने की अनुमति देता है, या "सही ढंग से" उस बिंदु पर कार्यक्रम को तोड़ देता है।
आप इसमें केवल "त्रुटि फ़ाइल मौजूद नहीं है" के साथ एक स्ट्रिंग लौटना नहीं चाहेंगे। फिर, आपको हर बार कॉलिंग फ़ंक्शन से स्ट्रिंग में त्रुटि को देखना होगा और इसे वहां संभालना होगा। आप वास्तव में यह भी नहीं बता सकते हैं कि क्या त्रुटि स्ट्रिंग वास्तव में एक वास्तविक फ़ाइल से पढ़ी गई थी, या यदि यह आपके कोड से उत्पन्न हुई थी।
आप इस तरह से पढ़ने को स्विफ्ट 2.2 और एक्सकोड 7.3 में भी नहीं कह सकते क्योंकि एनएसएसट्रींग (कंटेंटऑफफाइल ...) एक अपवाद फेंकता है। यह एक संकलित समय त्रुटि है यदि आपके पास इसे पकड़ने और इसके साथ कुछ करने के लिए कोई कोड नहीं है, जैसे कि इसे प्रिंटआउट करने के लिए प्रिंट करें, या बेहतर, त्रुटि पॉपअप विंडो, या stderr। मैंने सुना है कि ऐप्पल कैच और अपवादों से दूर जा रहा है, लेकिन यह एक लंबी चाल है और इसके बिना कोड लिखना संभव नहीं है। मुझे नहीं पता कि त्रुटि का तर्क कहां से आता है, शायद एक पुराना संस्करण, लेकिन NSString.writeTo [फ़ाइल | URL] में वर्तमान में NSError तर्क नहीं है। इन्हें NSString.h में इस तरह परिभाषित किया गया है:
public func writeToURL(url: NSURL, atomically useAuxiliaryFile: Bool, encoding enc: UInt) throws
public func writeToFile(path: String, atomically useAuxiliaryFile: Bool, encoding enc: UInt) throws
public convenience init(contentsOfURL url: NSURL, encoding enc: UInt) throws
public convenience init(contentsOfFile path: String, encoding enc: UInt) throws
इसके अलावा, जो फ़ाइल मौजूद नहीं है, वह कई संभावित समस्याओं में से एक है, जिसे आपके प्रोग्राम ने फ़ाइल को पढ़ना हो सकता है, जैसे कि अनुमतियाँ समस्या, फ़ाइल का आकार, या कई अन्य समस्याएँ जिनके लिए आप किसी हैंडलर को कोड करने का प्रयास नहीं करना चाहेंगे। उनमें से हर कोई। यह सही है कि यह सब सही है और इसे पकड़ना या प्रिंट करना, या संभालना, एक अपवाद है, अगर कुछ अलग हो जाता है, इसके अलावा, इस बिंदु पर, आपके पास वास्तव में वैसे भी कोई विकल्प नहीं है।
यहाँ मेरे पुनर्लेखन हैं:
func writeToDocumentsFile(fileName:String,value:String) {
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString!
let path = documentsPath.stringByAppendingPathComponent(fileName)
do {
try value.writeToFile(path, atomically: true, encoding: NSUTF8StringEncoding)
} catch let error as NSError {
print("ERROR : writing to file \(path) : \(error.localizedDescription)")
}
}
func readFromDocumentsFile(fileName:String) -> String {
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString
let path = documentsPath.stringByAppendingPathComponent(fileName)
var readText : String = ""
do {
try readText = NSString(contentsOfFile: path, encoding: NSUTF8StringEncoding) as String
}
catch let error as NSError {
print("ERROR : reading from file \(fileName) : \(error.localizedDescription)")
}
return readText
}