я видел в какой-то исходный код (другими разработчиками) что-то вроде этого:Что такое оператор импорта, в котором имя файла содержит «+»?
#import "SomeClass+SomeOtherClass.h"
Что такое +
для? Что это значит?
я видел в какой-то исходный код (другими разработчиками) что-то вроде этого:Что такое оператор импорта, в котором имя файла содержит «+»?
#import "SomeClass+SomeOtherClass.h"
Что такое +
для? Что это значит?
Предположим, вы хотите добавить функциональность в существующий класс (exp: NSString
). Вы можете сделать это, создав подкласс или вы можете использовать категорию. И обычно называют файл, где категория определена с использованием шаблона: MyClass+MyCategory.h
.
Например, мы можем добавить метод reverseString
к классу NSString
в категории:
// File NSString+reversable.h
- (NSString *)reverseString;
// File NSString+reversable.m
- (NSString *)reverseString
{
// Implementation
}
Посмотрите на эту documentation для получения дополнительной информации о категориях.
Затем вы можете использовать эту категорию в другом классе:
#import "NSString+reversable.h"
// ...
NSString *aString = @"Hello!";
NSString *reversedString = [aString reverseString];
Знака «+» в заголовке/источнике именах файлов - по соглашению - используются для описания Category
реализаций.
Пример:
Допустим, вы хотите, чтобы добавить некоторые функциональные возможности существующего класса (e.g.the NSString
класса). (NSString+Utilities.h
)
// NSString+Utilities.h
@interface NSString (Utilities)
-(NSString *) doSthWithThisString;
@end
// NSString+Utilities.m
@implementation NSString (Utilities)
-(NSString *) doSthWithThisString
{
NSMutableString *transformedStr = [self copy];
// Do sth
return transformedStr;
}
@end
С его помощью:
// in another file
#import "NSString+Utilities.h"
- (void)awakeFromNib
{
NSString* myString = @"This is a string";
// you may use our new NSString method as much as any already-existing one
NSString* newString = [myString doSthWithThisString];
}
Ссылка:
лол, мы оба использовали 'расширение NSString' в качестве примера. +1 для полного объявления расширения. – sch
@sch Hahaha ... Да, действительно; это довольно типичный пример (и его легко получить), не так ли? –