Как и большинство языков, Swift поддерживает переменные ограниченной области действия в условных выражениях, петлях и т. Д., Однако он, похоже, не поддерживает простой блок сам по себе, что является позором, поскольку я считаю его очень полезным способом ограничить область действия переменных, особенно дорогостоящих, которые могут потребоваться для полной длины функции.Возможно ли ограничить область в Swift?
Например, я мог бы сделать что-то подобное (с использованием Swift в качестве примера, так как это не будет в настоящее время компиляции):
var results = []
while let newResult = someFunction() { results.append(newResult) }
{
var newItems = []
while let newItem = foobar() { newItems.append(newItem) }
// Process newItems into results so we can add them
results += newItems
}
// Do some more stuff down here
Она также может быть очень удобно для общих названий заполнителей, но которые могут иметь различные типы в разных частях исполнения. Хотя я мог бы объявлять разные имена, это может на самом деле оказаться более запутанным или беспорядочным, чем просто повторное использование хорошего имени переменной с четко обозначенной областью.
Конечно, я могу сделать что-то вроде if true {}
, чтобы немного обмануть, но это кажется ненужным. Так есть способ, которым я могу просто объявить область/блок без необходимости вставлять условное выражение?
Я знаю, что это может быть связано с тем, как могут быть образованы замыкания, но есть ли способ сделать что-то подобное исключительно для ограничения области переменных в Swift?
переменная сфера = «стоимость» – user2864740
@ user2864740 могли бы вы уточнить, что вы имеете в виду? Вы подразумеваете, что использование закрытий и т. Д. Непригодно в качестве средства для этого? Разве они просто не скомпилируются? – Haravikk