প্রকৃতপক্ষে উপরের উত্তরগুলি দুর্দান্ত, তবে ক্রমাগত বিকাশিত ক্লায়েন্ট / সার্ভার প্রকল্পে বহু লোকের কী প্রয়োজন তার জন্য তারা কিছু বিশদ অনুপস্থিত। আমাদের ব্যাকেন্ডটি ক্রমাগতভাবে সময়ের সাথে বিকশিত হওয়ার সময় আমরা একটি অ্যাপ্লিকেশন বিকাশ করি যার অর্থ কিছু এনাম কেসগুলি সেই বিবর্তনকে পরিবর্তন করে দেয়। সুতরাং আমাদের এমন একটি এনাম ডিকোডিং কৌশল দরকার যা অজানা মামলাগুলি ধারণ করে এমন এনামগুলির অ্যারে ডিকোড করতে সক্ষম। অন্যথায় অ্যারে থাকা অবজেক্টটিকে ডিকোডিং করা সহজভাবে ব্যর্থ হয়।
আমি যা করেছি তা বেশ সহজ:
enum Direction: String, Decodable {
case north, south, east, west
}
struct DirectionList {
let directions: [Direction]
}
extension DirectionList: Decodable {
public init(from decoder: Decoder) throws {
var container = try decoder.unkeyedContainer()
var directions: [Direction] = []
while !container.isAtEnd {
// Here we just decode the string from the JSON which always works as long as the array element is a string
let rawValue = try container.decode(String.self)
guard let direction = Direction(rawValue: rawValue) else {
// Unknown enum value found - ignore, print error to console or log error to analytics service so you'll always know that there are apps out which cannot decode enum cases!
continue
}
// Add all known enum cases to the list of directions
directions.append(direction)
}
self.directions = directions
}
}
বোনাস: বাস্তবায়ন লুকান> এটিকে একটি সংগ্রহ করুন
বাস্তবায়ন বিশদটি গোপন করা সর্বদা একটি ভাল ধারণা। এর জন্য আপনার আরও কিছুটা কোড দরকার। কৌশলটি হ'ল আপনার অভ্যন্তরীণ অ্যারেটি ব্যক্তিগতভাবে তৈরি DirectionsList
করা Collection
এবং তৈরি করা list
:
struct DirectionList {
typealias ArrayType = [Direction]
private let directions: ArrayType
}
extension DirectionList: Collection {
typealias Index = ArrayType.Index
typealias Element = ArrayType.Element
// The upper and lower bounds of the collection, used in iterations
var startIndex: Index { return directions.startIndex }
var endIndex: Index { return directions.endIndex }
// Required subscript, based on a dictionary index
subscript(index: Index) -> Element {
get { return directions[index] }
}
// Method that returns the next index when iterating
func index(after i: Index) -> Index {
return directions.index(after: i)
}
}
জন স্যান্ডেলের এই ব্লগ পোস্টে আপনি কাস্টম সংগ্রহগুলিকে মেনে চলার বিষয়ে আরও পড়তে পারেন: https://medium.com/@johnsundell/creating-custom-collections-in-swift-a344e25d0bb0