Desenvolver una tupla en veloz

Este código parece válido para mí, pero no desenvuelve la tupla

func updateUserDefaults<T>(data:T) { if let data = data as? (String, Any) { println(data.1) } } updateUserDefaults(("loop", true)) 

Mi objective es hacer de esto un setter genérico para NSUserDefaults. La razón por la que uso un genérico es para que pueda pasarlo fácilmente en mi código reactivo como sigue (el próximo espera una function de T -> ():

 loop.producer |> map { ("loop", $0) } |> start(next: updateUserDefaults) 

ACTUALIZAR:

parece que esto parece funcionar, lo desenvuelve y se puede proporcionar como T -> ()

 func updateUserDefaults<T>(data:(String, T)) { if let value = data.1 as? Bool { userDefaults.setBool(value, forKey: data.0) } else if let value: AnyObject = data.1 as? AnyObject { userDefaults.setObject(value, forKey: data.0) } userDefaults.synchronize() } 

Está utilizando una function genérica y luego tiene acceso al parámetro como un parámetro escrito.

Seguramente tu function debería ser …

 func updateUserDefaults(data: (String, Any)) { println(data.1) } updateUserDefaults(("loop", true)) 

Al usar generics no significa que sabrá automáticamente el tipo de esquema de los datos que usted transfiere.

Significa que no conoce el esquema de los datos que usted pasa, sino que no sabe ni debe preocuparse.

Además, los data del parámetro no son opcionales, por lo que no es necesario desenvolverlo.

No puede "desenvolver" un parámetro genérico en un tipo conocido. No funciona de esa manera.