Существует ли комбинация клавиш в Xcode для реализации протокола?

#objective-c #xcode #refactoring #code-generation

Вопрос:

В Visual Studio, если я определяю класс для реализации интерфейса, например

 class MyObject : ISerializable {}
 

Я могу щелкнуть правой кнопкой мыши на ISerializable, выбрать «Реализовать интерфейс» в контекстном меню и увидеть, как соответствующие методы отображаются в определении моего класса.

 class MyObject : ISerializable {
    #region ISerializable Members
    public void GetObjectData(SerializationInfo info, 
                StreamingContext context)
    {
        throw new NotImplementedException();
    }
    #endregion
}
 

Есть ли что-нибудь подобное этой функции, доступной в Xcode на Mac? Я хотел бы иметь возможность автоматически реализовывать протоколы таким образом. Возможно, с помощью дополнительных методов, созданных, но закомментированных.

Ответ №1:

В настоящее время XCode не поддерживает такого рода автоматизацию. Но: простой способ загрузить свой код с помощью протокола-щелкнуть по имени протокола в объявлении класса.

 @interface FooAppDelegate : NSObject <NSApplicationDelegate, 
                                      NSTableViewDelegate> {
 

чтобы быстро открыть файл .h, определяющий протокол. Оттуда скопируйте и вставьте интересующие вас методы. Эти заголовки, как правило, хорошо прокомментированы, что помогает определить, какие методы вы можете безопасно игнорировать.

Комментарии:

1. Но вы не отвечаете на вопрос. Он спрашивает о комбинации клавиш для их добавления, чтобы избежать копирования/вставки.

2. @лагос Я думаю, что Клей отвечает на вопрос. Он говорит, что ответ «нет», и предлагает альтернативу.

Ответ №2:

Я не видел этой функции в Xcode. Но, похоже, кто-то мог бы написать новый пользовательский скрипт под названием «Поместить определения разработчика в буфер обмена», который находится внутри скриптов > Код.

Вы не сочли это полезным.

Комментарии:

1. Кто не нашел, что полезного, и почему, и по поводу чего?

Ответ №3:

В настоящее время в Xcode нет такого рефакторинга.

Если вам это нужно, пожалуйста, отправьте запрос на улучшение.

Ответ №4:

Я знаю, что эта тема немного устарела, но я задавался тем же вопросом и нашел этот вопрос.

В моем случае я определяю свойство в интерфейсе (.h) и хочу синтезировать его в реализации (.m). Мне также нужно реализовать методы, определенные в интерфейсе. Да, Xcode помогает, как упоминали другие, но современные IDE предлагают такие улучшения производительности для вещей, которые мы часто делаем. Похоже, что это все еще не функция в Xcode 4.3.3. Однако эта функция доступна в коде приложения JetBrains. Я только балуюсь пробной версией, но, похоже, это возможно только для одного свойства или метода за раз, а не для всего интерфейса, как в Visual Studio.

Ответ №5:

Xcode может помочь вам в методе протокола, допустим, у вас есть такой протокол:

 @protocol PosterousWebsitesDelegate <NSObject>
- (void)PosterousWebsitesLoadSuccess:(PosterousWebsites*)websites;
@end
 

в разделе @реализация вашего файла .m вы можете начать писать имя метода и нажать клавишу ESC, чтобы автоматически заполнить подпись метода/селектора:

 -(void)Poste (...press ESC...)
 

Xcode автоматически заполнит полную подпись метода @protocol, на вкладке pres для подтверждения кода.

Если вы действительно хотите изучить разработку OSX/iOS, я бы рекомендовал вам прочитать «XCode 3 Unleashed», книгу, которая действительно помогла мне узнать Xcode так глубоко, как я знаю VS 🙂

Комментарии:

1. Вы даже можете сделать это быстрее, просто написав - P (press ESC) (без возвращаемого типа — Xcode5 все равно покажет правильный селектор). См. Development_gems из видеороликов wwdc…

Ответ №6:

проверьте этот плагин

https://github.com/music4kid/FastStub-Xcode

он делает то, о чем вы просите, и даже больше.

Ответ №7:

Макруморы тоже обсуждали это. Есть ссылка на некоторые скрипты Apple. На самом деле я их еще не пробовал.