class AnsViewController: UIViewController {
var theNum: Int
override func viewDidLoad() {
super.viewDidLoad()
println(theNum)
}
}
override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
let viewController = self.storyboard.instantiateViewControllerWithIdentifier("ansView") as AnsViewController
viewController.num = theNum
self.presentViewController(viewController, animated: true, completion: nil)
}
Используйте если оператор. Я не знаю то, что издержки для ПОПЫТКИ/ВЫГОДЫ, но я подозреваю, что это намного больше, чем оценка булева выражения. Для удара ПОПЫТКИ/ВЫГОДЫ, Вы будете иметь к: выполните оператор, генерируйте ошибку [с теми связанными издержками], зарегистрируйте ошибку (по-видимому), сделал stacktrace (по-видимому), и попятился в код. Кроме того, если необходимо отладить код около тех строк, реальная ошибка могла бы быть запутана с тем, что Вы - ПОПЫТКА/ЛОВЛЯ.
, Кроме того, это - неправильное употребление ПОПЫТКИ/ВЫГОДЫ и может сделать Ваш код этим намного тяжелее для чтения. Предположим, что Вы делаете это для дольше или более запутываемые случаи? Где Ваша выгода могла бы закончиться?
Это упоминается как Обработка исключений
РЕДАКТИРОВАНИЕ: Как прокомментировано ниже, Вы только получаете удар производительности во время выполнения при фактическом порождении исключения.
Исключения должны использоваться для исключительных обстоятельств (т.е. вещи, что Вы не ожидаете происходить обычно). Вы не должны, в целом, использовать исключения для ловли чего-то, на что можно протестировать с если оператор.
кроме того, от того, что я понимаю, исключения являются намного более дорогими чем если бы операторы.
Для обеспеченного примера, где Вы переносите попытку/выгоду вокруг блока кода, который должен всегда работать так или иначе (если, если что-то ужасное происходит), это не хорошая форма для использования попытки/выгоды. Аналогия для Вас: Вы всегда тестируете, "Лазурный?" в Вашем, если оператор, или был бы Вы переносить его в попытку/выгоду, которая инициирована только, когда небо, оказывается, оказывается Green.
Использование, Если метод оператора, если Вы имеете дело с пользователем, предоставленным входу или если возможности функции, не существующей, происходит намного выше из-за чего-то еще происходящего в коде.
Имеют в виду, что, если Вы не инициировали исключение, у Вас нет раскручивания или отслеживания в обратном порядке через код. В примере только выполнится выгода, если что-то будет неправильно (jQuery отсутствует или некоторая такая вещь), однако, если метод оператора имеет оценку, происходящую на КАЖДОМ ВЫЗОВЕ с той функцией - Вы не должны делать большего количества работы, чем Вы имеете к.
Я написал бы следующий код:
var startTime = (new Date()).getTime();
for (var i=0; i < 1000; ++i) intvar();
var endTime = (new Date()).getTime();
alert("Took " + ((endTime - startTime) / 1000.0) " seconds");
Затем я попробовал бы обе версии intvar и видел бы который выполнения более быстро. Я сделал бы это сам, но у меня нет макета страницы, который Вы делаете так, мой код не работал бы.
Некоторые стилистические комментарии - не кажется необходимым протестировать, это jQuery
является функцией. Если это не, Ваша веб-страница, вероятно, испорчена таким образом, что, не работая эти intvar
код не поможет Вам. Если бы Вы редко ожидаете, что исключения будут брошены, я использовал бы попытку/выгоду.
Другие ответы корректны, try/catch
для исключительных обстоятельств и обработки ошибок. if
условия для логики программы. "Который быстрее?" неправильный вопрос.
А хорошее эмпирическое правило, если Вы ничего не делаете за исключением, это - вероятно, не исключение!
Для выяснения, чтобы использовать давайте сломаем Ваш если условие.
typeof jQuery == 'function'
jQuery () функция, определяемая? typeof nav == 'object'
военно-морская глобальная переменная содержит объект? typeof pageid != 'undefined'
pageid определенная глобальная переменная? typeof document.getElementById('leftnav') == 'object'
документ содержит leftnav элемент? первым является ясно исключение. Вы не становится далеким без jQuery () функция.
вторым является также исключение. Вы не идете никуда без военно-морского объекта.
третьим является исключение. Вам нужен pageid, чтобы сделать что-либо.
четвертой является, вероятно, логика. "Только выполните этот код, если существует leftnav элемент". Трудно сказать, потому что остальная часть кода не ссылается на leftnav элемент! Только комментарии делают, красный флаг. Таким образом, это - вероятно, ошибка программирования.
, Таким образом, я, вероятно, сделал бы это (с извинениями, если я забиваю jQuery):
var intvar = setInterval(function() {
// If there's no leftnav element, don't do anything.
if( typeof document.getElementById('leftnav') != 'object') {
return;
}
try {
clearInterval(intvar);
jQuery('#'+nav[pageid].t1+'>a')
.replaceWith(jQuery('<span>'+jQuery('#'+nav[pageid].t1+'>a').text()+'</span>'));
//set display classes for nav
jQuery('#'+nav[pageid].t1)
.addClass('selected')
.find('#'+nav[pageid].t2)
.addClass('subselect'); //topnav
jQuery('#'+nav[pageid].t3)
.addClass('selected')
.find('#'+nav[pageid].t4)
.addClass('subselect'); //leftnav
}
catch(err) {
...do something with the error...
}
},100);
..., но я действительно исследовал бы, если leftnav проверка элемента применима.
Наконец, я не могу не прокомментировать, что эта "функция" работает с глобальными переменными. Необходимо вместо этого передавать nav
и pageid
в функцию для поддержания инкапсуляции и исправности.