это способ проверки параметра, если он целочисленный или нет.
if (is_int((int) $_GET['user_id']) && (int) $_GET['user_id'] != 0) {
$user_id = $_GET['user_id'];
}
Проблема в том, что каждое значение в entryParameters
является словарем, поэтому, когда вы делаете entryParameters.forEach
, вы получаете тип словаря в замыкании, а не (key, value)
.
Вы получите (key,value)
при вызове forEach
в этом словаре. Итак, ваш метод должен выглядеть примерно так:
func getIndices(with source: [String], in entryParameters: [[String:Any]]) -> [String:[Int:Any]] {
var indices = [String:[Int:Any]]()
source.forEach { item in indices[item] = [Int:Any]() }
var index = 0
entryParameters.forEach { entry in
entry.forEach {(arg: (key: String, value: Any)) in
let (key, value) = arg
indices[key]?[index] = value
}
index += 1
}
return indices
}
Я только что проверил это на Playground.
var double = [String:[Int:Double]]()
double["Taco"] = [2: 3.2]
func myFunc(double: [String:[Int:Double]]) {
print(double.count) //Prints 1
print(double["Taco"]!) //Prints [2:3.2]
}
func myFunc2(all: [String:Any]) {
print(all.count) //Prints 1
print(all["Taco"]!) //Prints [2:3.2]
}
myFunc(double: double)
myFunc2(all: double as [String:Any])
У меня есть свой начальный [String:[Int:Double]]()
. Внутри этого словаря я установил double["Taco"] = [2: 3.2]
. Я могу использовать 2 разные функции, одну из которых принимают за исходный тип [String:[Int:Double]]
, и ее легко использовать, поскольку функции принимают один и тот же тип параметра. Тем не менее, теперь я создал функцию, которая использует словарь [String:Any]
. Теперь, чтобы ИСПОЛЬЗОВАТЬ этот метод, мы ДОЛЖНЫ типизировать переменные при вызове метода [String:Any]
, как вы можете видеть ниже.