无法使用 Alamofire 检索确切的查询响应

Not able to retrieve the exact queried response using Alamofire

我对 Swift 编程和开发 ios 应用相当陌生。我正在构建一些东西,它将使用 Wordpress API 从 Wordpress 网站检索帖子和其他信息。我使用 https://mywebsite.com/wp-json/wp/v2/posts 作为端点来获取我需要的数据。在 UICollectionView 中显示信息之前,我正在使用 AlamofireSwiftyJSON 提取数据并进行解析。

我正在使用参数查询 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"): default, AnyHashable("x-cacheable"): bot, AnyHashable("allow"): GET, AnyHashable("x-cache"): HIT: 2, AnyHashable("Cache-Control"): max-age=10800, must-revalidate, AnyHashable("Content-Encoding"): gzip, AnyHashable("x-cache-group"): bot, 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"): Thu, 19 Nov 1981 08:52:00 GMT, AnyHashable("access-control-allow-headers"): Authorization, Content-Type, AnyHashable("x-wp-total"): 77, AnyHashable("Date"): Fri, 22 Feb 2019 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.1Swift 4.2Alamofire (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 NSError{
    public convenience init(_ message:String) {
        self.init(domain: "network_error", code: -529, userInfo: [NSLocalizedDescriptionKey:message])
    }
}

我认为归档项目后 Alamofire 包出现问题。我尝试重新创建该项目并且它运行良好,直到我将该项目存档以在另一台设备上进行测试。所以,我已经切换到 urlRequest 而不是使用 Alamofire 请求。用下面的替换 Alamofire 请求对我来说很好。

var urlRequest = URLRequest(url: URL(string: "https://mywesite.com/wp-json/wp/v2/posts?per_page=100")!)

let task = URLSession.shared.dataTask(with: urlRequest) { (data,response,error) in