Мой любимый метод, так как Swift 2.0 is flatten
var a:[CGFloat] = [1, 2, 3]
var b:[CGFloat] = [4, 5, 6]
let c = [a, b].flatten()
Это вернет FlattenBidirectionalCollection
, поэтому, если вы просто хотите CollectionType
, этого будет достаточно, и вы будете имеют ленивую оценку бесплатно. Если вам нужен именно массив, вы можете это сделать:
let c = Array([a, b].flatten())
Поскольку несколько других указали в целом, что это не проблема.
единственный случай это вызовет Вас, проблемы - то, если Вы возвращаетесь посреди оператора использования и дополнительно возвращаетесь в использовании переменной. Но с другой стороны, это также вызвало бы, Вы выходите, даже если Вы не возвратили и просто сохранили ссылку на переменную.
using ( var x = new Something() ) {
// not a good idea
return x;
}
Так же, как плохо
Something y;
using ( var x = new Something() ) {
y = x;
}
Это прекрасно абсолютно - без проблем вообще. Почему Вы полагаете, что это неправильно?
оператор использования А является просто синтаксическим сахаром для блока попытки/наконец, и поскольку Grzenio заявляет, что хорошо возвращаться из блока попытки также.
выражение возврата будет оценено, тогда наконец, блок будет выполняться, тогда метод возвратится.
Это прекрасно подходит.
Вы, по-видимому, думаете, что
using (IDisposable disposable = GetSomeDisposable())
{
//.....
//......
return Stg();
}
вслепую переводится в:
IDisposable disposable = GetSomeDisposable()
//.....
//......
return Stg();
disposable.Dispose();
, Который, по общему признанию, был бы проблемой и сделает using
оператор довольно бессмысленный---, который является, почему это не , что это делает.
компилятор удостоверяется, что объект расположен, прежде чем управление оставляет блок - независимо от того, как это оставляет блок.
Это будет работать превосходное, так же, как возвращающийся посреди try{}finally{}
Это полностью приемлемо. использование оператор гарантирует, что объект IDisposable будет расположен несмотря ни на что.
От MSDN:
оператор использования гарантирует, чтобы Расположили, назван, даже если исключение происходит, в то время как Вы - вызывающие методы для объекта. Можно достигнуть того же результата путем помещения объекта в блоке попытки, и затем вызов Располагают в наконец блок; на самом деле это - то, как оператор использования переводится компилятором.