AFAIK, en Swift, llamar al inicializador predeterminado de clases/estructuras inicializará todo a 0
, nil
. En C (programación de socket, por ejemplo), a veces se usa memset para establecer todo en 0 antes de usar la estructura. ¿Necesito usar memset en swift también o está bien como lo escribí?
(Por cierto, en este caso se usa memset
porque las hints
deben establecerse en 0, excepto por debajo de 2 parámetros. No 0 (basura, etc.) tendrá efectos secundarios en la res
al llamar a getaddrinfo
.
struct addrinfo hints, *res; int status; memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; status = getaddrinfo(NULL, MYPORT, &hints, &res);
var res = UnsafeMutablePointer<addrinfo>() var hints = addrinfo() hints.ai_family = AF_UNSPEC hints.ai_socktype = SOCK_STREAM let status = getaddrinfo(nil, MYPORT, &hints, &res)
De las notas de la versión de Xcode 6.3 :
Las estructuras C importadas ahora tienen un inicializador predeterminado en Swift que inicializa todos los campos de la estructura a cero.
Lo que significa que
var hints = addrinfo()
inicializa todos los campos de struct addrinfo
a cero y no hay necesidad de llamar a memset()
.