Вы, вероятно, хотите, чтобы родительские и дочерние узлы имели тип того же типа , что и сам узел, а не только некоторый тип , соответствующий Node
. Это будет Self
в определении протокола:
protocol Node {
var parent: Self? { get set }
var children: [Self] { get set }
}
Теперь вы можете определить конкретный класс (см. Требование к протоколу Swift, которое может быть удовлетворено только при использовании окончательного класса для почему класс должен быть final
):
final class TreeNode: Node {
var parent: TreeNode? = nil
var children: [TreeNode] = []
}
и
func getReversedChildren(node: T) -> [T] {
return node.children.reversed()
}
компилируются без проблем.
Вся суть НЕ в том, чтобы использовать ярлыки Cmd-C
/ Cmd-V
. У меня такая же проблема, исходящая от IntelliJ, и возможность просто дублировать строки с помощью Cmd-D
и удалять их с помощью Cmd-Y
- это большая экономия времени.
Это было сделано. с тех пор меня беспокоит. Однако похоже, что кто-то еще нашел решение , которое работает.
Короче говоря, создайте файл ~ / Library / KeyBindings / PBKeyBinding.dict
со следующим содержимым и перезапустите Xcode.
{
"^$K" = (
"selectLine:",
"cut:"
);
"^$D" = (
"selectLine:",
"copy:",
"moveToEndOfLine:",
"insertNewline:",
"paste:",
"deleteBackward:"
);
}
Это создаст два ярлыка: Ctrl - Shift - K для удаления текущей строки и Ctrl - Shift - D для дублирования текущей строки. Обратите внимание, что это будет только , если вы НЕ используете настраиваемую привязку клавиш, установленную в Xcode. Переключитесь на «XCode Default», и все должно работать. Протестировано в XCode 3.2 на Snow Leopard.
Дополнительная информация о привязках клавиш Mac OS X: http://funkworks.blogspot.it/2013/03/republishing-of-wwwerasetotheleftcompos.html
Трижды нажмите для выбора целой строки, команда-c, чтобы выбрать и управлять-v дважды для дублирования его. Это не функция XCode, это - просто часть ОС.
Для удаления строки : Ctrl - для движения в начало строки, затем Ctrl - K для удаления его, и другое время Ctrl - K для удаления пустой строки. (Я не использую XCode очень часто, но я привык к этому в Emacs и других вводах текста с подобной Emacs привязкой, и это, кажется, работает в XCode также.)
И копировать строку : Я не знаю о многих программах, которые имеют команду для этого, но обычно я просто использую Copy+Paste - в XCode, это подобно CUA: Ctrl + для движения в начало строки, Сдвиг + в † “ для выбора его, Команда + C для копирования и Команда + * V для вставки дважды (однажды переопределение строки и однажды добавляющий к нему).
(от человека, который вводит и редактирует текст все время, так часто в различных программах, и иногда получает pissed при необходимости отвлечься с немым виджетом при создании небольшого исправления во вводе текста, что он просто не может постараться не помнить эти последовательности и привычки)
Перейдите к этому адресу:
/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet
и затем копирует файл IDETextKeyBindingSet.plist в некоторых где и затем открывает скопированный файл и вставляет
selectLine: копия: вставка: вставка: как это изображение вводят описание изображения здесь и сохраняют его и заменяют скопированный файл в этом/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet
адреса, затем перезапускают XCode, открывают предварительные заборы XCode, перейдите к вкладке привязки клавиш, поиск дублирующейся (настроенной) строки и определите короткий ключ для него как изображение ниже
Если вы уже настроили привязки клавиш Xcode, вам придется отредактировать файл: ~ / Library / Application Support / Xcode / Key Привязки / <пользователь> .pbxkeys
. Просто добавьте два массива (описанных выше) в Корневой / текстовый
словарь.
Использовать пользовательские сценарии.
Еще есть скрипты для перемещения и удаления строк. Вы должны определить привязки клавиш для этих сценариев (меню Сценарии -> Редактировать пользовательские сценарии ... в xCode 3.2).
Чтобы продублировать строку, вы должны создать свой собственный скрипт. Но это очень просто! Дублируйте сценарий «Переместить строку вниз» и удалите строку, удаляющую выделенный текст:
delete (paragraphs startLine through endLine)
Решение от damien.flament отлично работает, и вам может потребоваться установить output на «Отменить вывод», см. Рисунок ниже
PS: Не знаю, как прокомментировать его ответ.