Skip to content

Instantly share code, notes, and snippets.

enum Router: URLRequestConvertible {
case getProducts(pageSize: Int, page: Int)
case deleteProduct(idx: Int)
var baseURL: URL {
return URL(string: "https://api.service.com")!
}
var method: HTTPMethod {
switch self {
func getProducts(pageSize: Int,
page: Int,
completion: @escaping (Result<[Product], Error>) -> Void) {
var headers: HTTPHeaders = []
if let accessToken = KeychainService.loadAccessToken() {
headers["Autorization"] = "Bearer \(accessToken)"
}
let parameters: [String: Any] = [
class User: Serializable {
@Serialized
var idx: Int
@Serialized("user_name")
var name: String
@Serialized(alternateKey: "mobileNumber")
var phoneNumber: String?
struct User: Codable {
var idx: Int
var name: String
enum CodingKeys: String, CodingKey {
var idx = "user_idx"
var name = "user_name"
}
init(from decoder: Decoder) throws {
struct BundleResource {
@BundleResourceWrapper(decoder: { String(data: $0, encoding: .utf8) }, name: "License", type: "txt")
static var licenseText: String?
@BundleResourceWrapper(decoder: { UIImage(data: $0) }, name: "thumbnail", type: "jpg")
static var thumbnail: UIImage?
}
@propertyWrapper
struct BundleResourceWrapper<Resource> {
typealias DecodeHandler = (Data) -> Resource
let decoder: DecodeHandler
let fileManager: FileManager = .default
let bundle: Bundle = .main
let name: String
let type: String
if let path = Bundle.main.path(forResource: "License", ofType: "txt"),
let data = FileManager.default.contents(atPath: path),
let txt = String(data: data, encoding: .utf8) {
// ...
}
Bundle.main.infoDictionary!["CFBundleShortVersionString"] as? String
GlobalSetting.isRegistered = true
if GlobalSetting.isRegistered {
// ...
}
struct GlobalSetting {
@UserDefaultsWrapper(key: "isRegistered", defaultValue: false)
static var isRegistered: Bool
}