我是Siesta的新手。如何获取整个数组并传入我的模型?此外,我怎么能用params发帖?在他们的文档中我找不到任何这个。
答案 0 :(得分:1)
我也是午睡的新手。我能够在http://bustoutsolutions.github.io/siesta/guide/requests/
找到有关请求的文档基本上,您将设置资源,然后致电:
resource.request(.post, json: ["foo": [1,2,3]])
答案 1 :(得分:0)
您的问题过于复杂,因此我将尝试以一种简单的方式向您解释。
让我们说我们要解码此JSON响应:
{
"id": 1,
"name": "Oswaldo",
"email": "omaestra@gmail.com"
}
进入我们出色的User
类,该类实现了可解码协议:
class User: Decodable {
var id: Int
var name: String
var email: String
private enum CodingKeys: String, CodingKey {
case id, name, email
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decode(Int.self, forKey: .id
name = try container.decode(String.self, forKey: .name)
email = try container.decode(String.self, forKey: .email)
}
}
太棒了!现在,我们可以将服务器的JSON响应解码为很棒的User
类。
接下来,在我们的Siesta.Service
类中,我们可以为特定资源配置自定义转换器:
class API: Siesta.Service {
init() {
super.init(baseURL: "https://api.example.com")
// Some initial configuration
}
let myAPI = API()
// –––––– Global configuration ––––––
let jsonDecoder = JSONDecoder()
// –––––– Mapping from specific paths to models ––––––
// These all use Swift 4’s JSONDecoder, but you can configure arbitrary transforms on arbitrary data types.
configureTransformer("rest/user/") {
// Input type inferred because the from: param takes Data.
// Output type inferred because jsonDecoder.decode() will return User
try jsonDecoder.decode(User.self, from: $0.content)
}
// MARK: - Resources
var userResource: Siesta.Resource { return resource("rest/user/") }
}
最后,我们可以在ViewController
内部实现资源:
class UserViewController: UIViewController {
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var emailLabel: UILabel!!
override func viewDidLoad() {
super.viewDidLoad()
myAPI.userResource
.addObserver(self)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
myAPI.userResource.loadIfNeeded()
}
}
extension UserViewController: ResourceObserver {
func resourceChanged(_ resource: Resource, event: ResourceEvent) {
let user: User? = resource.typedContent()
nameLabel.text = user?.name
emailLabel.text = user?.email
}
}
注意:Siesta是非常灵活且可自定义的框架,您可以找到多种配置服务和资源的方法。这只是实现您所要求的一种简单方法。
Service
类中执行以下操作:实施发出POST请求的update
方法。
func update(user: User, newName: String) -> Siesta.Request {
return usersResource
.child(user.id)
.child("update")
.request(.post, json: ["name": newName])
}
然后,在您的ViewController
中,可以调用该方法来提交POST
请求并评估其响应:
myAPI.update(user: user, newName: "NEW NAME")
.onSuccess({ (_) in
print("Successfully updated user's name.")
})
.onFailure({ (error) in
print("Error trying to update user's name.")
})