Asignar a variable o devolverlo de inmediato no funciona

Si hago esto:

func myFunc() -> NSRange{ var range = s.rangeOfString(searchText, options: .CaseInsensitiveSearch) return s.rangeOfString(searchText, options: .CaseInsensitiveSearch) } 

Recibo un error que dice que hay arguments adicionales en la segunda llamada. ¡Pero son exactamente iguales!

Por otro lado, esto funciona bien:

 func myFunc() -> NSRange{ var range = s.rangeOfString(searchText, options: .CaseInsensitiveSearch) return range } 

Mi pregunta está implícita. Entonces, aquí está: ¿por qué el comstackdor rápido no queda satisfecho con la primera opción y en su lugar me hace asignar primero el retorno de la function a una variable?

Si eso funciona para usted, aquí está mi código completo:

 var a: [MyObject] = [] array = a.filter{ var b = ($0 as MyObject).molecule.name var s: NSString = b as NSString var range = s.rangeOfString(searchText, options: .CaseInsensitiveSearch) return s.rangeOfString(searchText, options: .CaseInsensitiveSearch) return range.location != -1 } 

El problema es diferente de lo que informa Swift. El informe de errores en Swift puede ser bastante extraño a veces.

El problema real es que el filter espera que se devuelva un valor boolean, lo que representa si ese elemento se debe include. Pero rangeOfString devuelve un NSRange .

Entonces, si devuelve una expresión que produce un valor boolean, funciona bien.

 return s.rangeOfString( searchText, options: .CaseInsensitiveSearch ).location != NSNotFound 

Por eso tu primer ejemplo funciona bien. ¡Dices que esta function devuelve un NSRange y luego devuelves un NSRange para que funcione!

 func myFunc() -> NSRange{ var range = s.rangeOfString(searchText, options: .CaseInsensitiveSearch) return s.rangeOfString(searchText, options: .CaseInsensitiveSearch) }