跳到主要內容

iOS json Decodable

 

不知道做了什麼,但先留著

protocol DecodableDefaultSource {

    associatedtype Value: Decodable

    static var defaultValue: Value { get }

}


enum DecodableDefault {}


extension DecodableDefault {

    @propertyWrapper

    struct Wrapper<Source: DecodableDefaultSource> {

        typealias Value = Source.Value

        var wrappedValue = Source.defaultValue

    }

}


extension DecodableDefault.Wrapper: Decodable {

    init(from decoder: Decoder) throws {

        let container = try decoder.singleValueContainer()

        wrappedValue = try container.decode(Value.self)

    }

}


extension KeyedDecodingContainer {

    func decode<T>(_ type: DecodableDefault.Wrapper<T>.Type,

                   forKey key: Key) throws -> DecodableDefault.Wrapper<T> {

        try decodeIfPresent(type, forKey: key) ?? .init()

    }

}


extension DecodableDefault {

    typealias Source = DecodableDefaultSource

    typealias List = Decodable & ExpressibleByArrayLiteral

    typealias Map = Decodable & ExpressibleByDictionaryLiteral


    enum Sources {

        enum True: Source { static var defaultValue: Bool { true } }

        enum False: Source { static var defaultValue: Bool { false } }

        enum EmptyString: Source { static var defaultValue: String { "" } }

        enum EmptyList<T: List>: Source { static var defaultValue: T { [] } }

        enum EmptyMap<T: Map>: Source { static var defaultValue: T { [:] } }

    }

}


extension DecodableDefault {

    typealias True = Wrapper<Sources.True>

    typealias False = Wrapper<Sources.False>

    typealias EmptyString = Wrapper<Sources.EmptyString>

    typealias EmptyList<T: List> = Wrapper<Sources.EmptyList<T>>

    typealias EmptyMap<T: Map> = Wrapper<Sources.EmptyMap<T>>

}


extension DecodableDefault.Wrapper: Equatable where Value: Equatable {}

extension DecodableDefault.Wrapper: Hashable where Value: Hashable {}

extension DecodableDefault.Wrapper: Encodable where Value: Encodable {

    func encode(to encoder: Encoder) throws {

        var container = encoder.singleValueContainer()

        try container.encode(wrappedValue)

    }

}

留言

這個網誌中的熱門文章

collection view part6 swift

preselect collectionview https://stackoverflow.com/questions/45610785/how-to-preselect-and-highlight-a-cell-from-a-uicollectionview https://hackernoon.com/uicollectionviewcell-selection-made-easy-41dae148379d if collectionview allow multiple selection remeber add this, cell item could be Deselect collectionView. selectItem (at: indexPath, animated: true , scrollPosition: . top ) https://stackoverflow.com/questions/15330844/uicollectionview-select-and-deselect-issue save indexpath userdefault https://stackoverflow.com/questions/34804294/how-to-save-nsindexpath-locally https://stackoverflow.com/questions/37001643/how-to-add-nsindexpath-to-nsuserdefaults-in-swift navigation presneted viewcontroller dismiss https://stackoverflow.com/questions/31205002/why-is-it-bad-practice-to-have-a-viewcontroller-dismiss-itself indexpath comparison         if selectIndexPath . contains (indexPath) {             cell. isSelect...

android java 小數點的坑

如果temp  = 12.5                         val newTemp = "%.1f".format(Tempvalue) 原本的寫法是這樣 在法語區 將newTemp.toFloat() 後會掛,因為法語地區的小數點是 , 逗號 所以沒法轉成 12.5  會變成 12,5 後來的解法 將拿到的數字硬轉成 12.5  其他就不管了 val newTemp = "%.1f" . format ( Locale . US , Tempvalue)

collection view part 5 swift

load plist data https://www.cnblogs.com/gongyuhonglou/p/6029340.html https://blog.csdn.net/sophieDJF/article/details/88247388 https://stackoverflow.com/questions/24045570/how-do-i-get-a-plist-as-a-dictionary-in-swift https://stackoverflow.com/questions/40436895/how-to-read-plist-without-using-nsdictionary-in-swift get specifig key in dictionary https://stackoverflow.com/questions/24640990/how-do-i-get-the-key-at-a-specific-index-from-a-dictionary-in-swift get specifig key with index https://stackoverflow.com/questions/31775724/swift-dictionary-access-via-index get collectionview selection https://stackoverflow.com/questions/21639394/how-to-select-item-in-collectionview-programmatically add button in uinavigationbar https://www.hackingwithswift.com/example-code/uikit/how-to-add-a-bar-button-to-a-navigation-bar child viewcontroller pass data to parent viewcontroller https://stackoverflow.com/questions/39285588/how-to-pass-data-from-child-to-parent-view-controller-in-sw...