一个神奇的工具库。
🔥 通过 @dynamicMemberLookup
实现跨层级取值 ~
🔥 不仅可以用字典来初始化,还可以使用任意的 struct
和 class
前要说明:部分思路以及类型判断学习和借鉴自 SwiftyJSON,
基本包含 SwiftyJSON 的所有功能 ~
.iOS(.v9)
.tvOS(.v9)
.watchOS(.v6)
.macOS(.v10_10)
.Vapor(4.0)
let dict: [String: Any] = {
"result": [
"list": [
[
"name": "hello lookup",
"age": 1
]
]
]
}
let lookup = Lookup(dict)
lookup.result.list.array // -> [["name": "hello lookup"]]
lookup.result.list.0.name.string // -> "hello lookup"
比如 1 可转换为 "1", 不需要使用 as
, 直接 lookup.value.string
即可
lookup.result.list.0.age.string // -> "1"
lookup.result.list.0.age.int // -> 1
lookup.result.list.0.age.double // -> 1.0
这里特指取值失败的情况
// lookup.message.isSome // 取到了 “message” 的值
// lookup.message.isNone // 取到的值为 nil,或者没有找到这个 “message” 字段
guard lookup.message.isSome,
let message = lookup.message.string else {
return
}
// do something use message
可直接使用 struct 或 class 实例进行初始化
struct Person {
var name: String
var age: Int
}
let person = Person(name: "lookup", age: 1)
let lookup = Lookup(person)
lookup.name.string // -> "lookup"
lookup.age.int // -> 1
支持 Codable
支持 Vapor
Decode
let lookup = try req.content.decode(Lookup.self)
Encode
let params = Lookup([
"userId": 1,
"nickname": "lookup"
])
try await req.client.post(uri, headers: headers) { inoutReq in
try inoutReq.content.encode(params)
}
更多用法参考 LookupTests.swift
: LookupTests.swift
pod 'Lookup', :git => "https://github.com/iWECon/Lookup", :tag => "2.2.1"
// for swift-tools-version: 5.3
// swift 5.0 +
.package(url: "https://github.com/iWECon/Lookup", from: "2.2.0")
link |
Stars: 4 |
Last commit: 3 weeks ago |
Full Changelog: https://github.com/iWECon/Lookup/compare/2.3.0...2.3.1
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics