Как назначить переменную int параметру запроса?

В следующем фрагменте 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
}

2 ответа

Попробуйте следующее (работает со Swift 4, Vapor 2):

func test2() throws {
    let req = Request.makeTest(method: .get)
    let id = 1
    req.parameters["id"] = Parameters(id)
}

Это потому, что 1 не int. Это вещь, которая может быть преобразована в различные типы (например, Int, Int32, Float, Double, UInt и т. Д.), И компилятор выяснит, может ли он быть преобразован в тип, который заставляет вызов работать. Во втором случае компилятор решил, когда вы присвоили id, что id будет Int. И, очевидно, Int не может быть назначен на параметры?

Другие вопросы по тегам