#generics #swift4
#общие #swift4
Вопрос:
Я пытаюсь настроить универсальный метод в swift, где параметром может быть либо словарь [String:Any]?
, либо массив словарей [[String:Any]]?
, оба необязательных. Я не знаком с синтаксисом generics до этого уровня в Swift, но я попробовал это:
private class func weirdGenerics<T>(thing:T) where T:Optional<[(String, Any)]>, T:Optional<[[(String, Any)]]>{
}
Что выдает ошибку:
Type 'T' Constrained to non-protocol, non-class type
Для обоих этих общих ограничений. Как бы вы выполнили синтаксис, который я ищу здесь?
Комментарии:
1. Чего вы хотите достичь с помощью этого? Любая информация будет полезна. Метод может / должен принимать только массив словарей. Он также может содержать один словарь. Таким образом, вы можете перебирать.
2. @MuhammadZohaibEhsan Мне нужен метод, который будет принимать либо необязательный словарь, либо необязательный массив словарей. Текущий код не работает, так как я получаю данную ошибку во время компиляции. Я предполагаю, что это проблема синтаксиса, а не то, что это невозможно на языке Swift. Хотя я понимаю, что мог бы просто принять массив и цикл, это не то решение, которое я ищу. Я хочу знать синтаксис, как указано выше.
Ответ №1:
Компилятор Swift жалуется, потому что общие ограничения (например: … где T: Equatable) может быть либо классом, либо типом протокола, тогда как вы указываете перечисление (необязательно) в качестве ограничения. Чтобы решить эту проблему, вы могли бы сделать следующее:
private class func weirdGenerics(thing: Optional<[(String, Any)]>) {
}
private class func weirdGenerics(thing: Optional<[[(String, Any)]]>) {
}