Swift Generics словарь или массив словарей

#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)]]>) {

}