我对Swift
编程和开发ios应用程序还很陌生。我正在构建一些东西,该东西将使用Wordpress API
从Wordpress网站检索帖子和其他信息。我正在使用https://mywebsite.com/wp-json/wp/v2/posts
作为端点来获取所需的数据。我正在使用Alamofire
和SwiftyJSON
提取数据并进行解析,然后再在UICollectionView
中显示信息。
我正在使用参数查询API以获取所需的数据。目前基本上是过滤帖子。问题是我总是在响应中获得默认号码(前十个帖子)。该查询似乎工作正常,因为该网站能够接收确切的查询请求并正在按预期方式进行响应。但是无论出于什么原因,我都无法在Xcode内部收到的响应中看到该数据。默认情况下,前10个帖子就好像没有应用任何过滤器或查询一样。我不知道发生了什么事。我一直在调试它几天,没有任何运气。因此,我要在这里发布信息,看看是否有人对解决这个谜团有任何想法。
以下是我为此编写的函数。
func getPosts() {
Alamofire.request(baseURL, parameters: parameters).responseJSON { (response) -> Void in
if((response.result.value) != nil) {
let postsJson = JSON(response.result.value!)
self.posts = [SitePosts]()
//Testing
print(response.request as Any)
print(response.response?.allHeaderFields)
print("Total posts: \(postsJson.arrayValue.count)")
do {
for posts in postsJson.arrayValue {
let post = SitePosts()
let title = posts["title"]["rendered"].stringValue
let content = posts["content"]["rendered"].stringValue
let url = posts["link"].stringValue
let urlToImage = posts["featured_image_link"].string
post.content = content
post.title = title
post.url = url
post.imageUrl = urlToImage
self.posts?.append(post)
}
DispatchQueue.main.async {
self.postsCollectionView.reloadData()
}
}
}
}
}
以下是已发送到API的响应请求
[AnyHashable(“ wpe-backend”):apache,AnyHashable(“ Server”):nginx,
AnyHashable(“ x-type”):默认; AnyHashable(“ x-cacheable”):漫游器,
AnyHashable(“ allow”):GET,AnyHashable(“ x-cache”):HIT:2,
AnyHashable(“ Cache-Control”):max-age = 10800,必须重新验证,
AnyHashable(“ Content-Encoding”):gzip,AnyHashable(“ x-cache-group”):
机器人,AnyHashable(“ x-pass-why”):,
AnyHashable(“ access-control-expose-headers”):X-WP-Total,
X-WP-TotalPages,AnyHashable(“ x-wp-totalpages”):8
AnyHashable(“ Content-Type”):application / json; charset = UTF-8,
AnyHashable(“ x-content-type-options”):nosniff,
AnyHashable(“ Expires”):格林尼治标准时间1981年11月19日星期四,
AnyHashable(“ access-control-allow-headers”):授权,
Content-Type,AnyHashable(“ x-wp-total”):77,AnyHashable(“ Date”):周五,
2019年2月22日22:46:42 GMT,AnyHashable(“ Link”):
https://mywebsite.com/wp-json/wp/v2/posts?page=2; rel =“ next”,
AnyHashable(“ x-robots-tag”):noindex]
我正在使用
Xcode 10.1
,Swift 4.2
,Alamofire (4.8.1)
,SwiftyJSON (4.2.0)
和Wordpress V2 API
。我在Alamofire请求之后添加了一个断点。附上我所见的屏幕截图。Screenshot of the breakpoint
最佳答案
我猜由于不同的API方法动词(POST,GET),未在服务器端检测到您的参数。尝试跟随
class BaseAPIsCaller: NSObject {
static func post(url:String,parameters:Parameters,_ completion:@escaping (Data?,NSError?)->Void){
let request =
Alamofire.request(url, method: .post, parameters: parameters,
encoding: JSONEncoding.default)
request.responseJSON { response in
guard response.result.error == nil else {
completion(nil,NSError(response.result.error!.localizedDescription))
return
}
guard (response.result.value as? [String: Any]) != nil else {
completion(nil,NSError("Didn't get json object"))
return
}
completion(response.data!,nil)
}
}
}
然后在任何地方使用此方法,例如:
func getPosts()->Void{
BaseAPIsCaller.post(url:"https://mywebsite.com/wp-json/wp/v2/posts", parameters: [:]) { (data:Data?, error:NSError?) in
if let data = data {
let json = JSON(data)
print(json)
}else{
print(error!.localizedDescription)
}
}
}
注意:我正在使用NSError Extension
extension NSError{
public convenience init(_ message:String) {
self.init(domain: "network_error", code: -529, userInfo: [NSLocalizedDescriptionKey:message])
}
}