Интерфейсы Objective C, делегаты и протоколы

Если у Вас есть эта проблема, когда Вы разрабатывающий компонент, таким образом, необходимо добавить эти два модуля к самому близкому модулю:

import { FormsModule, ReactiveFormsModule } from '@angular/forms';
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
   // other modules
    FormsModule,
    ReactiveFormsModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

И если Вы разрабатываете тест для своих компонентов, таким образом, необходимо добавить этот модуль к тестовому файлу как это:

import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ContactusComponent } from './contactus.component';
import { ReactiveFormsModule } from '@angular/forms';

describe('ContactusComponent', () => {
  let component: ContactusComponent;
  let fixture: ComponentFixture<ContactusComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ContactusComponent],
      imports:[
        ReactiveFormsModule
      ]

    })
      .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(ContactusComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });
});
6
задан Isuru 24 January 2013 в 03:54
поделиться

3 ответа

  • Задача делегата - получать уведомления, когда другой объект что-то делает. Например, один из ваших объектов хочет знать, что окно закрывается, поэтому вы регистрируете его как делегата окна и реализуете метод windowWillClose: . Он будет вызываться NSWindow соответственно. Таким образом, методы делегата обычно определяются в другом классе. До определенного момента он позволяет вам расширять функциональность класса без создания подклассов.

  • ( Изменить: см. Ответ Дэниела о протоколах.)

  • @interface - это объявление класса, в котором перечислены переменные-члены и методы. Он находится в .h , который вы импортируете, если вам нужно использовать класс. Код для методов находится в @implementation в файле .m . В Java все по-другому, файл .java служит обеим целям.

13
ответ дан 8 December 2019 в 02:27
поделиться

Я бы посоветовал проверить:

Язык программирования Objective-C 2.0

Он должен дать ответ на большинство ваших вопросов о протоколах и интерфейсах.

Протоколы

] Интерфейсы

Что касается делегатов, это может быть новый объект или объект, в котором вы создаете вещь, нуждающуюся в делегате. Файлы на самом деле не имеют к этому никакого отношения.

2
ответ дан 8 December 2019 в 02:27
поделиться

Протокол делегата должен быть определен как таковой

@protocol 
//methods
@end

, его можно поместить в любой класс .h, вам просто нужно импортировать его всякий раз, когда вы собираетесь его использовать.

Протокол не похож на интерфейс Java, протокол - это адаптер, который позволяет двум классам работать вместе. По сути, он говорит, что если вы хотите, чтобы класс A отправлял вам сообщения о своем состоянии и действиях, это методы, которые он будет вызывать у своего делегата, которые вы должны реализовать. Это не похоже на интерфейс, потому что интерфейс говорит, что если вы хотите создать подкласс этого класса, вы должны реализовать эти методы, протокол говорит, что если вы хотите взаимодействовать с этим классом, вы должны реализовать эти методы, поэтому он несколько отличается.

22
ответ дан 8 December 2019 в 02:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: