#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. На самом деле я их еще не пробовал.