के रूप में मैं जेएसओएन और पी-सूची एन्कोडिंग और डिकोडिंग दोनों काम करने में कामयाब रहा, लेकिन केवल एक विशिष्ट ऑब्जेक्ट पर एन्कोड/डिकोड फ़ंक्शन को सीधे कॉल करके।कोडन के साथ एक चर को एन्कोड करने के लिए JSON एन्कोडर का उपयोग
उदाहरण के लिए:
struct Test: Codable {
var someString: String?
}
let testItem = Test()
testItem.someString = "abc"
let result = try JSONEncoder().encode(testItem)
यह अच्छी तरह से और मुद्दों के बिना काम करता है।
हालांकि, मैं एक ऐसा फ़ंक्शन प्राप्त करने का प्रयास कर रहा हूं जो केवल कोड के रूप में कोडेबल प्रोटोकॉल अनुरूपता लेता है और उस ऑब्जेक्ट को सहेजता है।
func saveObject(_ object: Encodable, at location: String) {
//Some code
let data = try JSONEncoder().encode(object)
//Some more code
}
यह निम्न त्रुटि में परिणाम है:
Cannot invoke 'encode' with an argument list of type '(Encodable)'
एनकोड समारोह की परिभाषा को देखते हुए, ऐसा लगता है जैसे कि यह Encodable, स्वीकार करने के लिए सक्षम होना चाहिए, जब तक कि मूल्य कुछ अजीब प्रकार मैं डॉन है के बारे में पता नहीं है
open func encode<Value>(_ value: Value) throws -> Data where Value : Encodable
करने के लिए विवश का प्रयोग करें [प्रोटोकॉल खुद को के अनुरूप नहीं है] (https://stackoverflow.com/a/43408193/2976878) है, तो आप में स्थानापन्न नहीं कर सकता जेनेरिक प्लेसहोल्डर 'वैल्यू' के लिए 'एनकोडेबल', 'एनकोडेबल' एक प्रकार नहीं है जो 'एनकोडेबल' के अनुरूप है। वैदियन कहते हैं, बस एक जेनेरिक प्लेसहोल्डर का उपयोग करें। – Hamish