Make Function As Request
import Far
/* 定义login接口 */
let login = POST<Account, UserInfo>(url: "https://www.exmple.com/login")
/* 定义friends接口 */
let friends = POST<Page, [Friend]>(url: "https://www.exmple.com/friends")
/* 调用login接口 */
let account = Account(name: "Jack", password: "*******")
let response = await login.request(account)
let userInfo: UserInfo = response.value
/* 调用friends接口 */
let page = Page(offset: 0, count: 20)
let response = await friends.request(page)
let someFriends: [Friend] = response.value
Session
有默认值, 所以这一步是可选的
Far.session = Alamofire.Session()
⚠️ : 在网络请求开始后, 对Session
的设置将不再生效.若要检查
Session
是否可以修改, 使用Far.isSessionFinalized
, 为false
表示可以修改.
/* 设置Base URL (定义的API将继承这个domain) */
Far.api.dataRequest.base("https://www.exmple.com/")
DataRequest
- Headers
Encoding
/Encoder
- Authentication
- Redirect
DataResponse
- Validation
acceptableStatusCodes
acceptableContentTypes
validations
CachedResponseHandler
DispatchQueue
- Serialize
serializeData
serializeString
serializeJSON
serializeDecodable
- Validation
/* 定义login接口 (base url继承自Far.api.dataRequest.base) */
let login = POST<Account, UserInfo>("login")
/* 定义friends接口, 并设置超时时间 */
let friends = POST<Page, [Friend]>("friends")
let account = Account(name: "Jack", password: "*******")
/*
对当前API使用mock modifier修饰, login api变为mock请求. (mock modifier只在DEBUG环境生效)
*/
let mockedLogin = login.mock("http://www.mocking.com/login")
let response = await mockedLogin.request(account)
.base(_:)
.appendPath(_:)
.mock(_:)
.header(name:, value:)
.headers(_:)
.encoding(_:)
.encoder(_:)
.timeoutInterval(_:)
.authenticate(username:, password:, persistence:)
.authenticate(credential:)
.redirect(using:)
.validate(statusCode:)
.validate(contentType:)
.validate(identifier:, validation:)
.cacheResponse(using:)
.queue(_:)
.serialize(dataPreprocessor:, emptyResponseCodes:, emptyRequestMethods:)
.serialize(dataPreprocessor:, encoding:, emptyResponseCodes:, emptyRequestMethods:)
.serialize(dataPreprocessor:, emptyResponseCodes:, emptyRequestMethods:, options:)
, deprecated and will be removed in next major release..serialize(dataPreprocessor:, decoder:, emptyResponseCodes:, emptyRequestMethods:)
AutoCancelRequest
是一个@propertyWrapper
, 可用于:
- 在网络请求开始后, 获取
Alamofire.DataRequest
- 当
ViewController.deinit
时, 自动取消网络请求
class ViewController: UIViewController {
/* 自动取消login请求 */
@AutoCancelRequest(login)
var userLogin
override func viewDidLoad(_ view: UIView) {
let response = await userLogin.request(account)
let userInfo = response.value
}
}
- iOS 10.0+, macOS 10.15+, tvOS 12.0+, watchOS 4.0+
dependencies: [
.package(url: "https://github.com/wlgemini/Far.git", .upToNextMajor(from: "5.8.0"))
]
pod 'Far', '~> 5.8.0'
Far is available under the MIT license. See the LICENSE file for more info.