어흥

[Objective-C] 문자열, 파일, 프로토콜 본문

iOS

[Objective-C] 문자열, 파일, 프로토콜

라이언납시오 2020. 10. 15. 14:06
728x90
반응형

1. 서브스트링

- range에 문자열을 자를 기준을 정의한다(여러개 선언 불가)

- substringToIndex : range에 정의한 기준을 최초로 만나기전까지의 문자열을 반환

- substringFromIndex: range에 정의한 기준을 최초로 만난 이후부터 나머지의 길이(range.length)만큼 반환

NSString *str1 = @"123,4567,123";
NSRange range = [str1 rangeOfString:@","];

if(range.location!=NSNotFound){
  NSString *bc = [str1 substringToIndex:range.location];
  NSString *ac = [str1 substringFromIndex:range.location+range.length];

  NSLog(@"Before comma : %@",bc);
  NSLog(@"After comma : %@",ac);
}

 

2. 파일 생성

 NSString *str = @"ABCD";		//파일에 저장할 내용
        
NSString *folderPath = @"파일 저장할 경로";		//파일을 저장할 경로
NSString *filePath = [folderPath stringByAppendingPathComponent:@"string.txt"];		//위의 경로에 string.txt 파일 생성
__autoreleasing NSError *error;		//Error 관리 위해 생성

BOOL ret = [str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
if(!ret){		//실패한 경우
	NSLog(@"Eoor : %@", [error localizedDescription]);
}
else{			//파일을 성공적으로 생성한 경우
	NSLog(@"파일 저장 성공!");
}
NSString *str2 = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];
NSLog(@"Str2 : %@",str2);		//저장한 내용 보유

 

3. 프로토콜

- 목적

  1) 다른 객체가 구현해주면 되는 메소드를 선언(기능에 대해 선언만 하고 어떤 클래스가 해당 기능을 수행할 것인지 정하지 않는다 -> 유연)

  2) 클래스를 숨기고 인터페이스만 선언하고자 할 때

  3) 상속관계가 아니지만, 비슷한 인터페이스를 만들고 싶을 때

- 다수의 프로토콜 채택 가능(,를 통해)

- 프로토콜은 다른 프로토콜 채택 가능

- 필수요소는 @required를, 선택요소는 @optional을 사용한다

 

[예시 코드]

//Singing.h (프로토콜)
@protocol Singing <NSObject>
@property int duration;
-(void) sing;

@end

//Bird.h
#import <Foundation/Foundation.h>
#import "Singing.h"			//프로토콜 임포트

@interface Bird : NSObject <Singing>

@end

//Bird.m
import "Bird.h"

@implementation Bird
@synthesize duration;

-(void)sing {				//내부 구현
    NSLog(@"Sing~");
}

@end

//Main.m
#import <Foundation/Foundation.h>
#import "Bird.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Bird *obj1 = [[Bird alloc] init];
        obj1.duration = 10;
        [obj1 sing];		//Sing~
        
        id<Singing> obj2 = [[Bird alloc] init];
        obj2.duration = 20;
        [obj2 sing];		//Sing~
    }
    return 0;
}

 

 

참고 블로그

- soooprmx.com/archives/2432

 

728x90
반응형

'iOS' 카테고리의 다른 글

[Objective - C] 아카이빙  (0) 2020.10.16
[Objective-c] Collection  (0) 2020.10.16
[Objective-C] 기본 내용 2  (0) 2020.10.14
[Objective - C] 기본 개념  (0) 2020.09.24
[Swift] Animation  (0) 2020.09.15
Comments