无法将“Foundation.URLRequest”类型的值强制转换为“Alamofire.URLConvertible”

Could not cast value of type 'Foundation.URLRequest' to 'Alamofire.URLConvertible'

提问人:user979331 提问时间:8/24/2023 最后编辑:user979331 更新时间:8/24/2023 访问量:40

问:

我正在尝试使用带有正文的 Alamofire 进行发布请求:

let credential = URLCredential(user: appDelegate.username!, password: appDelegate.password!, persistence: .none)
        
        var url = URL(string: webservice)
        
        var request = URLRequest(url: url!)

        request.setValue("application/json", forHTTPHeaderField: "Content-Type")

        request.setValue("application/json", forHTTPHeaderField: "Accept")

        request.httpMethod = "POST"

        request.httpBody = jsonData
        
        let urlRequest: Alamofire.URLRequestConvertible = request
        
        AF.request(urlRequest as! URLConvertible, headers: headers).authenticate(with: credential).response { response in
            
        }

但是我收到以下错误:

当我执行实际请求时,无法将“Foundation.URLRequest”类型的值转换为“Alamofire.URLConvertible”。如何将我的 Foundation.URLRequest 转换为 Alamofire.URLConvertible?

谢谢

要清理 jsonData 是什么:

let jsonData: Data? = try? JSONSerialization.data(withJSONObject: jsonArrayOfDictionaries, options: .prettyPrinted)

jsonArrayOfDictionaries 为:

var jsonArrayOfDictionaries = [[AnyHashable: Any]]()

它的填充方式如下:

for i in 0..<cellHolder.count {
            
            //Define Dictionary for grading data
            
            var jsonDict = [AnyHashable: Any]()
            
            jsonDict["ID"] = cellHolder[i].id
            
            jsonDict["item"] = cellHolder[i].item
            
            jsonDict["Notes"] = cellHolder[i].notes

            jsonArrayOfDictionaries.append(jsonDict)
            
            jsonDict = [AnyHashable: Any]()


}

cellHolder 是我创建的类的 Array

class MyClass: NSObject {
    
    var id: Int?
    
    var item: String?
    
    var notes: String?
    
    init(id: Int?, item: String?, notes: Int?) {
       super.init()
        
        self.id = id
        
        self.item = item
        
        self.notes = notes
    }
}
iOS版 斯威夫特 阿拉莫火

评论

0赞 Larme 8/24/2023
URLConvertible ~ URL。您正在使用 ,并且您已经在其中使用了一些标头。你是怎么创造的,为什么不用?URLRequestjsonDataAF.request(webservice, method: .post, parameters: yourJSON, encoder: JSONParameterEncoder.default, headers: headers)
0赞 user979331 8/24/2023
我将用jsonData是什么来更新我的问题
0赞 user979331 8/24/2023
更新的问题

答:

0赞 user979331 8/24/2023 #1

删除标头并仅使请求正常工作:

let credential = URLCredential(user: appDelegate.username!, password: appDelegate.password!, persistence: .none)
        
        var url = URL(string: webservice)
        
        var request = URLRequest(url: url!)

        request.setValue("application/json", forHTTPHeaderField: "Content-Type")

        request.setValue("application/json", forHTTPHeaderField: "Accept")

        request.httpMethod = "POST"

        request.httpBody = jsonData
        
        AF.request(request).authenticate(with: credential).response { response in
            
        }