此类专为简单的网络任务而设计。
使用 Swift Package Manager 安装
dependencies: [
.package(url: "https://github.com/0xWDG/SimpleNetworking.git", branch: "main"),
],
targets: [
.target(name: "MyTarget", dependencies: [
.product(name: "SimpleNetworking", package: "SimpleNetworking"),
]),
]
并导入它
import SimpleNetworking
import SimpleNetworking
let networking = SimpleNetworking.shared
我们使用 networking
作为变量名,但您可以使用任何您喜欢的名称。请注意,在下面的示例中,我们使用 networking
作为变量名。如果您使用不同的名称,请将 networking
替换为您自己的变量名。 或者使用 SimpleNetworking.shared
代替 networking
。
networking.set(serverURL: "https://wesleydegroot.nl")
networking.set(userAgent: "STRING")
networking.set(authorization: "STRING")
networking.set(postType: .json) // .plain, .json, .graphQL
Task {
let response = await networking.request(
path: "/",
method: .get
)
print(response.string)
}
Task {
let response = await networking.request(
path: "/",
method: .post(
[
"postfield1": "poststring1",
"postfield2": "poststring2"
]
)
)
print(response.string)
}
networking.request(
path: "/",
method: .get
) { networkResponse in
print(networkResponse)
}
networking.request(
path: "/",
method: .post(
[
"postfield1": "poststring1",
"postfield2": "poststring2"
]
)
) { networkResponse in
print(networkResponse)
}
通过 networkResponse,您可以获得以下数据
struct MyCodable: Codable {
let value1: String
let value2: String
}
// Decode the response
let data: MyCodable? = networkResponse.decoded()
struct MyCodable: Codable {
let snakeCase: String
let caseSnake: String
}
// Decode the response
let data: MyCodable? = networkResponse.decoded(.convertFromSnakeCase)
import SimpleNetworking
networking.connect(to: "https://api.github.com/users/0xWDG") { data in
print(data)
}
let cookie = HTTPCookie.init(properties: [
.name: "my cookie",
.value: "my value",
.domain: "wesleydegroot.nl"
.path: "/"
])
networking.add(cookie: cookie)
networking.add(header: .init(name: "my header", value: "my value"))
// Or if you want to declare it first
let header = SimpleNetworking.HTTPHeader(name: "my header", value: "my value")
networking.add(header: header)
SimpleNetworking 可以被模拟 (自 1.0.3 版本起),因此您可以在不实际发出网络请求的情况下测试您的代码。
networking.set(mockData: [
"https://wesleydegroot.nl": .init(
data: "OVERRIDE", // Can be Data or String
response: .init( // NSURLResponse, Can be nil
url: .init(string: "https://wesleydegroot.nl")!,
mimeType: "text/html",
expectedContentLength: 8,
textEncodingName: "utf-8"
),
statusCode: 200, // Int: If omitted, 200 is used
error: nil
),
"/only/an/path": .init(
data: "OVERRIDE", // Can be Data or String
response: .init( // NSURLResponse, Can be nil
url: .init(string: "https://wesleydegroot.nl/only/an/path")!,
mimeType: "text/html",
expectedContentLength: 8,
textEncodingName: "utf-8"
),
statusCode: 200, // Int: If omitted, 200 is used
error: nil
)
])
/// Debug: NSURLRequest
networking.debug.requestURL = false
/// Debug: sent HTTP Headers
networking.debug.requestHeaders = false
/// Debug: sent Cookies
networking.debug.requestCookies = false
/// Debug: sent Body
networking.debug.requestBody = false
/// Debug: received HTTP Headers
networking.debug.responseHeaders = false
/// Debug: received Body
networking.debug.responseBody = false
/// Debug: received JSON (if any)
networking.debug.responseJSON = false
🦋 @0xWDG 🐘 mastodon.social/@0xWDG 🐦 @0xWDG 🧵 @0xWDG 🌐 wesleydegroot.nl 🤖 Discord
有兴趣了解更多关于 Swift 的信息吗? 查看我的博客。