在下面的代码片段test1()编译中,test2()没有。如何将Int
类型的变量分配给请求参数?
Swift 3.1.1版(swift-3.1.1-RELEASE) 目标:x86_64-unknown-linux-gnu
import Testing
import HTTP
func test1() throws {
let req = Request.makeTest(method: .get)
//OK compiles
req.parameters["id"] = 1
}
func test2() throws {
let req = Request.makeTest(method: .get)
let id = 1
// NOK doesn't compile
// compiler error:
// /path/to/file.swift:12:28: error: cannot assign value of type 'Int' to type 'Parameters?'
// req.parameters["id"] = id
// ^~
req.parameters["id"] = id
}
答案 0 :(得分:1)
那是因为1不是int。这是可以转换为各种类型的东西(例如Int,Int32,Float,Double,UInt等),编译器将确定它是否可以转换为使调用工作的类型。在第二种情况下,编译器决定何时为id指定id为Int。显然Int不能分配给参数?
答案 1 :(得分:1)
尝试以下方法(适用于Swift 4,Vapor 2):
func test2() throws {
let req = Request.makeTest(method: .get)
let id = 1
req.parameters["id"] = Parameters(id)
}