Como detectar esse parâmetro é uma tupla de dois tipos arbitrários?
Na verdade, o que estou fazendo é mais complexo, mas é possível implementar funções para detectar que algo é uma tupla, independentemente de quais são os tipos de seus elementos.
Este é o meu método que não funciona (veja o comentário na última linha):
func isTuple(b: Any) -> Bool {
return b is (Any, Any)
}
let myString = "aa"
let myDouble = 1.2
isTuple((myString, myDouble)) //returns false
Por que isso não funciona? Shouln'tAny
agir como um "curinga" nas tuplas também? É um bug conhecido do Swift (se não, devo considerá-lo um e relatar)? Existe outra maneira de fazerisTupple
método de trabalho?
@ NateCook's answer responde totalmente à pergunta original, mas isso não me ajuda a fazer o que estou tentando fazer. É isso:
Eu preciso não apenas determinar que algo é um tupple, mas também dividi-lo em seus 2 valores sem saber o tipo exato desses valores.
Aqui está o código:
func processIfTuple(b: Any) {
if reflect(b).disposition == MirrorDisposition.Tuple {
let (first, second) = b as (Any, Any) //error when casting
process(first)
process(second)
}
}
func process(value: Any) {
...
}
processIfTuple(("aa", 1.2))
Isso não funciona por razões semelhantes que o testeb is (Any, Any)
não funciona. Desta vez, há um erro ao tentar transmitir. Isso pode ser resolvido? Caso contrário, deve ser considerado um erro de idioma ou recurso ausente e relatado? Definitivamente, leva a muita duplicação de código, porque preciso testar todos os pares possíveis de tipos para uma tupla.