Тут кто-то уже писал про кривую обучения и все такое, в иностранных языках писать слово по 10 раз может быть и полезно, но в программировании базовые конструкции будут встречаться в ходе обучения настолько часто, что специально повторять их множество раз нет никакого смысла. Как прием для обучения - да это весьма наглядно в лекции - препод пишет 100 строк кода и сокращает их до пяти, и наш ленивый мозг убеждается в важности массивов и циклов, но пытать так людей в домашних - очень сомнительно и скорее отбивает желание учиться.
Error это общий протокол, а NSError класс, если нужно достать из него что-то, что есть в нем, но нет в Error, то кастят, но как я понимаю есть специфические для разных библиотек случаи, где нужно через NSError делать обработку ошибки