Swift上下文类型any不能与数组文字一起使用

Ged*_*nas 18 swift

我正在尝试使用参数创建一个新类,我收到一个错误:

上下文类型any不能与数组文字一起使用

我试图as Any在最后添加,但它不会工作.

class JsonParams {
    let userName = "root"
    let password = "admin01"

    static let param: [String: Any] = [
        "jsonrpc": "2.0",
        "id": 1,
        "method": "call",
        "params": [
            "00000000000000000000000000000000",
            "session",
            "login",
            [ "username": userName, "password": password]
        ]
    ]
}
Run Code Online (Sandbox Code Playgroud)

编辑:

现在我需要在有人输入之后从用户名文本字段发送用户名和密码到param,所以我想为param创建一个方法,

class JsonParams {

let userName = "root"
let password = "admin01"
var param = [String: Any]()
func log (username.text, password.text){
init() {
    let param : [String: Any] = ["jsonrpc": "2.0", "id": 1, "method": "call", "params": [ "00000000000000000000000000000000", "session", "login", [ "username": username.text, "password": password.text]]]
    self.param = param
}
Run Code Online (Sandbox Code Playgroud)

Sur*_*gch 14

未来访客的一般答案

当您尝试将数组分配给不是数组的内容时,可能会发生此类错误.

例1

let array: Int = [1, 3, 7, 4]
// error: contextual type Int cannot be used with array literal
Run Code Online (Sandbox Code Playgroud)

与其名称相反,该常数array被称为单一Int.但是然后为它分配了一个实际的数组.这可以通过以下任一方式解决.

let array = [1, 3, 7, 4]
let array: [Int] = [1, 3, 7, 4]
Run Code Online (Sandbox Code Playgroud)

例2

当有嵌套数组时,它可能不那么明显:

let array: [Int] = [1, 2, 7, [100, 200, 300]]
// error: contextual type Int cannot be used with array literal
Run Code Online (Sandbox Code Playgroud)

对于这个,您需要将其概括为[Any].

let array: [Any] = [1, 2, 7, [100, 200, 300]]
Run Code Online (Sandbox Code Playgroud)


Dha*_*esh 12

您需要以这种方式初始化对象:

class JsonParams {

    let userName = "root"
    let password = "admin01"
    var param = [String: Any]()

    init() {
        let param : [String: Any] = ["jsonrpc": "2.0", "id": 1, "method": "call", "params": [ "00000000000000000000000000000000", "session", "login", [ "username": self.userName, "password": self.password]]]
        self.param = param
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:

如果你想让userName你可以这样做:

class JsonParams {

    let userName = "root"
    let password = "admin01"
    var param = [String: Any]()

    init() {
        let param : [String: Any] = ["jsonrpc": "2.0", "id": 1, "method": "call", "params": [ "00000000000000000000000000000000", "session", "login", [ "username": self.userName, "password": self.password]]]
        self.param = param
    }

    func getUserName() -> String {

        return self.userName
    }
}
Run Code Online (Sandbox Code Playgroud)

这样你就可以访问:

let json = JsonParams()
json.getUserName()  //"root"
Run Code Online (Sandbox Code Playgroud)