2014-12-24 8 views
-2

я следующий учебник и спутать с помощью следующего кода:Swift: синтаксис объяснение - круглые скобки, то «в»

let rectToDisplay = self.treasures.reduce(MKMapRectNull){ 

      (mapRect: MKMapRect, treasure: Treasure) -> MKMapRect in 

      let treasurePointRect = 
       MKMapRect (origin: treasure.location.mapPoint, size: MKMapSize (width: 0, height: 0)) 

      return MKMapRectUnion(mapRect, treasurePointRect) 
     } 

На самом деле, я не понимаю только, что линия:

(mapRect: MKMapRect, treasure: Treasure) -> MKMapRect in 

ли что какая-то функция или что-то еще? Каков результат? Я не совсем понимаю смысл этой конструкции (struct: struct, someClass: someClass) -> Struct in

Что это за логика? В чем смысл «в»?

Если Вам интересно, treasure это пользовательский класс, который содержит координаты свойства - широта, долгота и т.д.

Я понимаю «весь» смысл этого фрагмента кода, но синтаксис этой строки запутать меня немного ..

Не могли бы вы дать пояснения? Большое спасибо!

+0

Docs: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-XID_151 – Logan

+0

Ссылка не объяснение , –

+2

Просить кого-то скопировать и вставить документацию не вопрос ... – Logan

ответ

6

В Swift есть два способа объявить функцию: с func, и с выражением закрытия:

// this is a function that takes an Int and returns a String 
func f(i: Int) -> String { return i.description } 
f(1) // returns "1" 

// this is also a function that takes an Int and returns a String 
let g = { (i: Int) -> String in return i.description } 
g(1) // returns "1" 

Последнее выражение закрытия - быстрый способ определения новой функции инлайн. Они чаще всего используются с функциями, которые выполняют функции (например, map, который принимает массив и функцию, которая преобразует элемент этого массива и запускает функцию для каждого элемента, создающего другой массив).

Синтаксис для выражений замыкания заключается в том, что они начинаются в фигурных скобках с аргументами и возвращаемым типом, а затем с in, а затем с телом функции. В отличие от func, который начинается с ключевого слова func, затем аргументы и тип возврата, а затем тело функции в фигурных скобках.

Вы не всегда видите in, потому что его можно остановить. Есть много сокращений, которые позволяют пропустить аргументы и тип возвращаемого значения (и ключевое слово return). Но иногда вам нужно их отдать, а затем вам нужно ключевое слово in.

Подробнее о выражениях замыкания вы можете узнать в Apple Swift book. Вы можете больше узнать о функциях и принципах закрытия here.

+0

Благодарим вас за разъяснение, теперь все станет ясно. –

Смежные вопросы