Эту проблему можно решить, добавив логическую переменную IF Statement вместе с функцией DispatchQueue, чтобы предотвратить появление другой анимации до завершения текущей анимации.
См. Ниже и, пожалуйста, upvote, если это вообще помогло:)
import UIKit
var animation_active = false
let animation_duration = 2 //For easy maintenance
func swipe_down() {
if animation_active == false {
animation_active == true
//Animation code goes here. Variable 'animation_active' should be used when performing the animation for easy matinence
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(animation_duration), execute: {
animation_active = false
})
}
}
func swipe_up() { //This is exactly the same as swipe_up. Yet it will prevent the swipe animation from occuring when the swipe down animation is occuruing thanks to the variable 'animation_active'
if animation_active == false {
animation_active == true
//Animation code goes here. Variable 'animation_active' should be used when performing the animation for easy matinence
DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(animation_duration), execute: {
animation_active = false
})
}
}
mylist.Cast<object>().ToArray()
Это будет повторяться только один раз, кстати, в случае Вы задавались вопросом о производительности. На). :)
Почему? Ну, потому что Cast
будет использовать отложенное выполнение и на самом деле ничего не будет делать, пока список не будет повторен с помощью ToArray ()
.
List<T>.Select(x => x as object).ToArray();
Должен возвращать объект []
.
Если у вас нет Linq (.Net 3.0), вы можете использовать методы ConvertAll () и ToArray () в списке:
List<T> list = new List<T>();
object[] objects = list.ConvertAll<object>(item => (object)item).ToArray();
theList.Cast<object>().ToArray()
или
new List<object>(theList).ToArray()
(object[])List<T>.ToArray();
Если вы не против написания очень короткой, многократно используемой функции, метод расширения ConvertAll может помочь:
http: //msdn.microsoft.com/en-us/library/73fe8cwf.aspx
EDIT:
This тоже сработает
List<int> intList = new List<int>() { 1, 3, 4 };
object[] objectList = intList.ConvertAll(item => (object)item).ToArray();
В C # на .NET 2.0 (VS 2008) следующие компилируются и не используют LINQ (насколько я вижу) для ссылочных типов.
object[] oArray;
List<MyObject> oList = new List<MyObject>();
oArray = oList.ToArray();
Это не требует приведения поскольку все ссылочные типы имеют объект в качестве своей базы.