- 기본 형태
{ (매개변수 목록) -> 반환타입 in
실행 코드
}
- 매개변수 없는 경우
{ () -> 반환타입 in
실행 코드
}
- 반환타입 없는 경우
{ (매개변수 목록) -> Void in
실행 코드
}
- 둘 다 없는 경우
{ () -> Void in
실행 코드
}
- 기본 형태
{ (매개변수 목록) -> 반환타입 in
실행 코드
}
- 매개변수 없는 경우
{ () -> 반환타입 in
실행 코드
}
- 반환타입 없는 경우
{ (매개변수 목록) -> Void in
실행 코드
}
- 둘 다 없는 경우
{ () -> Void in
실행 코드
}
선언
변수 : var 변수명
상수 : let 상수명
반 닫힌 범위 연산자(half-closed range operator)
1..<5 = 1,2,3,4
루프 상수 생략 : _ 로 대체 가능
for _ in 1...size {
실행문
}
repeat ~ while : do ~ while문 과 동일, 최소 한번 이상 실행 후 조건 체크 후 실행 여부 판단
repeat {
n = n * 2
}
while n < 1000
guard : if ~ else 동일 기능, else 필수, 결과가 참일 경우에는 실행되는 블록 없음, 즉 else인 경우에만 실행
guard 조건 else {
실행문
}
- svn ls svn_url
: svn 내 파일 보기
- svn checkout svn_url local_url
: checkout
- svn commit local_url -m "comment"
: commit
- svn import import_path svn_url
: import
: "*.a" 같은 파일은 추가 안될 수 있음. 이때 사용 가능한 옵션 --no-ignore
1. terminal 실행
- sudo gem install cocoapods(시간 좀 걸림)
- pod setup(시간 좀 걸림)
- Performing a deep fetch of the 'master' specs repo to improve performance 나오면 rm -fr ./cocoapods/repos/master 후 다시 pod setup
2. workspace create
3. project create
4. workspace에 3번 생성한 project add
5. terminal에서 workspace와 proect가 있는 폴더로 이동
6. pod init(Podfile 생성 확인)
7. Podfine 수정 (라이브러리 소스로 추가)
8. terminal에서 pod install(다운로드 확인)
9. #import <>
10. swift인 경우 use_framework! 추가
따따디씨에서 새로운 언어(?)를 발표했다.
스위프트란다.
기존 코드들에 대해 확 줄어들게 코딩할 수 있다던데
오늘 맛좀 봤다.
머든지 그렇겠지만 익숙해지면 편할듯
유니코드 지원으로 변수명 한글이 된다.
변수명을 변수라고 해봤다. 잘된다...ㅋㅋㅋ
다만 아직은 xcode6 - beta라서 자동완성 기능이 원활하지 않다.
스토리보드도 해야 하는데 스위프트까지 ;;;;
간단한 tutorial을 링크를 참조 하시길
http://text.youknowone.org/post/87652586691/swift-list
https://www.penflip.com/jjuakim/swift-korean
////////////////////////////////////////////////////////////////////////////////////////////////////////////
- (NSMutableDictionary *)resourcesCheck {
NSString* bundlePath = [[NSBundle mainBundle] bundlePath];
NSDirectoryEnumerator *enumerator = [[NSFileManager defaultManager] enumeratorAtPath:bundlePath];
NSString *filePath;
NSMutableDictionary *mArray = [[NSMutableDictionary alloc] init];
while ((filePath = [enumerator nextObject]) != nil) {
if (![[filePath pathExtension] isEqualToString:@"nib"]){
NSString *path = [bundlePath stringByAppendingPathComponent:filePath];
NSData *nsData = [NSData dataWithContentsOfFile:path];
if (nsData)
NSLog(@"%@", [nsData MD5]);
[mArray setObject:[nsData MD5] forKey:filePath];
}
}
return mArray;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////
#import "NSString+MD5.h"
@interface NSString(MD5)
- (NSString *)MD5;
@end
////////////////////////////////////////////////////////////////////////////////////////////////////////////
#import <CommonCrypto/CommonDigest.h>
@implementation NSString(MD5)
- (NSString*)MD5
{
// Create pointer to the string as UTF8
const char *ptr = [self UTF8String];
// Create byte array of unsigned chars
unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];
// Create 16 bytes MD5 hash value, store in buffer
CC_MD5(ptr, strlen(ptr), md5Buffer);
// Convert unsigned char buffer to NSString of hex values
NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x",md5Buffer[i]];
return output;
}
@end
////////////////////////////////////////////////////////////////////////////////////////////////////////////
#import "NSData+MD5.h"
@interface NSData(MD5)
- (NSString *)MD5;
@end
////////////////////////////////////////////////////////////////////////////////////////////////////////////
#import <CommonCrypto/CommonDigest.h>
@implementation NSData(MD5)
- (NSString*)MD5
{
// Create byte array of unsigned chars
unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];
// Create 16 byte MD5 hash value, store in buffer
CC_MD5(self.bytes, self.length, md5Buffer);
// Convert unsigned char buffer to NSString of hex values
NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x",md5Buffer[i]];
return output;
}
@end
////////////////////////////////////////////////////////////////////////////////////////////////////////////
static NSManagedObjectModel *managedObjectModel()
{
static NSManagedObjectModel *model = nil;
if (model != nil) {
return model;
}
NSString *path = @"CoreDataTutorial";
path = [path stringByDeletingPathExtension];
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"coredatatest" withExtension:@"mom"];
model = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return model;
}
static NSManagedObjectContext *managedObjectContext()
{
static NSManagedObjectContext *context = nil;
if (context != nil) {
return context;
}
@autoreleasepool {
context = [[NSManagedObjectContext alloc] init];
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel()];
[context setPersistentStoreCoordinator:coordinator];
NSString *STORE_TYPE = NSSQLiteStoreType;
NSString *path = @"coredatatest";
NSURL *url = [NSURL fileURLWithPath:[path stringByAppendingPathExtension:@"sqlite"]];
NSError *error;
NSPersistentStore *newStore = [coordinator addPersistentStoreWithType:STORE_TYPE configuration:nil URL:url options:nil error:&error];
if (newStore == nil) {
NSLog(@"Store Configuration Failure %@", ([error localizedDescription] != nil) ? [error localizedDescription] : @"Unknown Error");
}
}
return context;
}
int main(int argc, const char * argv[])
{
@autoreleasepool {
// Create the managed object context
NSManagedObjectContext *context = managedObjectContext();
// Custom code here...
// Save the managed object context
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Error while saving %@", ([error localizedDescription] != nil) ? [error localizedDescription] : @"Unknown Error");
exit(1);
}
NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"Banks" ofType:@"json"];
NSArray *Banks = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:dataPath] options:kNilOptions error:&error];
NSLog(@"Imported Banks : %@", Banks);
[Banks enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
FailedBankInfo *failedBankInfo = [NSEntityDescription insertNewObjectForEntityForName:@"FailedBankInfo" inManagedObjectContext:context];
failedBankInfo.name = [obj objectForKey:@"name"];
failedBankInfo.city = [obj objectForKey:@"city"];
failedBankInfo.state = [obj objectForKey:@"state"];
FailedBankDetails *failedBankDetails = [NSEntityDescription insertNewObjectForEntityForName:@"FailedBankDetails" inManagedObjectContext:context];
failedBankDetails.closeDate = [NSDate dateWithString:[obj objectForKey:@"closeDate"]];
failedBankDetails.updateDate = [NSDate date];
failedBankDetails.zip = [obj objectForKey:@"zip"];
failedBankDetails.info = failedBankInfo;
failedBankInfo.details = failedBankDetails;
NSError *error = nil;
if (![context save:&error]) {
NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}
}];
// Test listing all FailedBankInfos from the store
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"FailedBankInfo" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
for (FailedBankInfo *info in fetchedObjects) {
NSLog(@"Name: %@", info.name);
FailedBankDetails *details = info.details;
NSLog(@"Zip: %@", details.zip);
}
}
return 0;
}
참조 : http://www.raywenderlich.com
1. UITableView *tableView = (UITableView *)self.superview.superview;
NSIndexPath *path = [tableView indexPathForCell:self];
[tableView.delegate tableView:tableView didSelectRowAtIndexPath:path];
2. cell tag 연결 후 addTarget 하여 methhod 등록
1. NSUserDefaults : Dictionary 형태의 메모리 저장소
example>
// init
[NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
// get
[defaults objectForKey:@"Key"];
// set
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:@"Key", @"Value", nil];
[defaults registerDefaults:dictionary];
2. CoreData : Database를 wrap 한 저장소
[Update 예정]
3. Sqlite : Database
[Update 예정]
4. Plist : DIctionary 형태의 파일 저장소
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingString:@"/userInfo.plist"];
NSMutableDictionary *plist = [[NSMutableDictionary alloc] init];
[plist setValue:@"Value" forKey:@"Key"];
[plist writeToFile:filePath atomically:YES];
5. Keychain : 폰 내부에 같은 도메인끼리 참조 할 수 있는 데이터 저장소