Ответ 1
Просто протестировал его в Swift 1.2, поставляемом с бета-версией Xcode 6.3, и он скомпилирован успешно. Так что это определенно ошибка в компиляторе, которую они решили в последней версии
Все, что мне нужно сделать, это запустить новый проект в Swift и добавить к main.swift
struct Foo {
let bar: (inout baz: String) -> ()
}
Когда я пытаюсь построить, я получаю сообщение об ошибке: Command failed due to signal: Segmentation fault: 11
Я делаю что-то неправильно?
Я думал, что, возможно, параметры inout
в замыканиях не поддерживаются, но если я определяю замыкание так:
let baz: (inout baz: String) -> () = { baz in
baz += "x"
return
}
или даже
var baz: (inout baz: String) -> ()?
он компилируется и работает нормально
Просто протестировал его в Swift 1.2, поставляемом с бета-версией Xcode 6.3, и он скомпилирован успешно. Так что это определенно ошибка в компиляторе, которую они решили в последней версии
@Bartek Chlebek. В коде, который вы опубликовали, есть одна двусмысленная вещь (выделена жирным шрифтом): "let bar: (inout baz: String) → ()". Когда вы определяете свою функцию, вы сообщаете компилятору, что вы собираетесь возвращать пустой кортеж. Похоже, что более ранние версии компилятора не различали (должно быть ошибкой в двигателе ввода inferring) типа Void и "пустого типа кортежа" (который обозначается как "()). Вот пара слов о синтаксисе кортежей: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html#//apple_ref/doc/uid/TP40014097-CH31-ID448
Возможное решение: явно указать тип возвращаемого значения (в вашем случае это "Пустота" ). Надеюсь, это поможет.