Swift контекстный тип любой не может использоваться с литералом массива
Я пытаюсь создать новый класс с параметрами для запросов, и я получаю сообщение об ошибке:
contextual type any cannot be used with array literal
Я попытался добавить 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]
]
]
}
EDIT:
Теперь мне нужно отправить имя пользователя и пароль в 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
}
Ответы
Ответ 1
Вам нужно инициализировать объекты таким образом:
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
}
}
EDIT:
Если вы хотите получить 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
}
}
И таким образом вы можете получить доступ:
let json = JsonParams()
json.getUserName() //"root"
Ответ 2
Общий ответ для будущих посетителей
Этот тип ошибки может возникнуть, если вы попытаетесь присвоить массив тому, что не является массивом.
Пример 1
let array: Int = [1, 3, 7, 4]
// error: contextual type Int cannot be used with array literal
В отличие от его имени константа array
считается одиночной Int
. Но тогда ему присваивается реальный массив. Это можно устранить одним из следующих способов.
let array = [1, 3, 7, 4]
let array: [Int] = [1, 3, 7, 4]
Пример 2
Это может быть менее очевидно при наличии вложенных массивов:
let array: [Int] = [1, 2, 7, [100, 200, 300]]
// error: contextual type Int cannot be used with array literal
Для этого вам нужно будет обобщить его на [Any]
.
let array: [Any] = [1, 2, 7, [100, 200, 300]]