Swift랑 친해지기/Swift문법정리 62

[Swift] String & Characters (문자열 & 문자)

문자선언 방법 컴파일러가 타입추론을 통해 한단어를 작성하면 Character 자료형이 아닌 String 자료형으로 타입을 지정함 그래서 문자를 사용할때는 Character 자료형으로 꼭 선언해주어야함 빈문자열 빈문자 빈문자는 공백을 적어주어야함 공백이 없을시 오류남 빈문자열 생성시에는 공백을 없애야함 생성자를 이용하여 빈문자열을 만들 수 있음 String Types(문자열 타입) Swfit에서는 두개의 문자열 자료형을 사용함 두 자료형은 서로 호환됨 1. String => Swfit String - 구조체형식이며 값형식임 2. NSString => Foundation String - 참조형식이며 클래스 형식임 두가지가 서로 호환되는 것은 맞지만 NSString에서나 String에서 자동으로 Convert..

[Swift] Closure (클로져)

클로져 - 짧고 독립적인 코드 조각 클로져 종류 Named Closures - Global Function,Nested Function Unnamed Closures - Anonymous Function 보통 클로져라 하면 Unnamed Closures - Anonymous Function를 뜻함 함수와 클로져는 서로 자료형이 같아서 서로 호환이 됨 Global Scope에서는 단독으로 사용 불가 클로져도 First Class Citizen임 1. 변수, 상수에 저장가능 2. 파라미터로 전달할 수 있음 3. 함수와 메소드에서 리턴 가능 //Closures {(parameters) -> ReturnType in statements } // in 을 기준으로 앞은 closure head 뒤는 closure ..

[Swift] Tuples (튜플)

튜플언제 사용하나?? - 여러개의 데이터를 열거하여 담아두는데 사용 하나의 상수에 두개이상의 값을 저장하는게 불가능함 - Int나 String 자료형들은 하나의 값만 저장하는 스칼렛 타입이라 그럼 튜플은 컴파운드 타입으로 다음과 같이 두개이상의 값을 저장할 수 있음 // 튜플 사용법 (expr1,expr2,expr...) expr는 각각 tuple Member임 튜플은 (Int, String, Double)각각의 자료형으로 저장한다. 값에 접근하기 위해 접문법(Expicit Member Expression)을 사용하는데 위에 보이는 0 , 1, 2 는 튜플의 Index이다. 이때 상수일경우 값을 바꿀 수 없으며 변수일때만 값을 변경할 수 있다. 튜플은 값형식임(새로운 변수에 저장하면 값이 복사됨) tup..

[Swift] Escaping Closure

Non Escaping Closure 함수 바디에 있는 클로져는 항상 함수 실행이 종료되기 전에 완료됨 함수의 실행흐름을 탈출하지 않음 파라미터는 함수가 실행되면 생성되었다가 햠수의 실행이 끝나면 자동으로 제거됨 Escaping Closure 시작 시점과 종료 시점이 특정되어 있지 않음 함수의 관계와 상관없이 클로저를 실행할 수 있음 클로져가 a 상수 캡처함 escaping 클로져를 사용하면 함수의 실행흐름을 벗어날 수 있음 클로져가 캡처한 값이 클로져 실행이 완료될때까지 삭제되지않음 그래서 클로져 실행흐름이 함수흐름을 벗어나더라도 메모리 오류없이 정상적으로 실행됨

[Swift] Capturing values

캡처는 값을 가져와서 쓴다는 개념 Global Function은 값을 캡처하지 않음. Neted Function은 값을 캡처함 자신을 포함한 함수 바디에 접근할 때 그 값을 캡처함 캡처방법에는 두가지가 있음 1. Objective - C 에서는 복사본을 캡처함 2. Swift에서는 원본을 그대로 가져와 참조를 캡처하는 방법임 클로져 내부에서 클로져 외부에 있는 값에 접근하면 값에 대한 참조를 획득하여 원래 값도 바뀜

[Swift] Syntax-optimization (문법 최적화)

Swift는 단순한 코드를 선호함 컴파일러가 추론할 수 있는 부분은 생략함 문법최적화를 통해 단순하게 작성하는 것을 선호함 다음과 같이 fileter메소드는 프레임워크에 구현되어있다. 컴파일러는 프레임워크 코드를통해서 클로저형식을 추론할수있음 첫번째 파라미터형식과 리턴형을 생략할 수있음 두번째규칙 -파라미터의 이름은 Short and Argument name로 대체 -달러$ 와 숫자 0 결합 -$0부터 시작하며 두번째는 $1 순서 - 이때 파라미터 이름과 in 키워드를 없앰 세번째 규칙 -단일 리턴문만 남아있을경우 return키워드를 생략 (이것을 implicit return) 네번째 규칙 -클로져 파라미터가 마지막 파라미터라면 trailing closure사용 -트레일링 클로져는 함수나 메소드 호출식 ..

[Swift] Nonreturning Function (Never)

Nonreturning Function이란? 함수를 호출하는 코드 다음으로 제어를 전달하지 않는 함수임 사용법 - 리턴타입에 Never 특징 - 호출시 프로그램이 종료되거나, 에러를 처리하는 코드로 제어 전달 - @noreturn 에서 Swift3부터 바뀜 -케이스가 선언되어 있지 않은 빈 열거형으로 되어있음 -생성자를 만들수 없음 func a()-> Never{ } 프로그램이 종료되는 경우 print 함수는 주의 메시지에 실행이 절대 안될거라고 나옴 guard 문에서 else블록은 코드를 중지함 보통 return 문,throw문 사용하지만 Nonereturning 함수도 사용 가능 에러를 처리하는 코드로 제어 전달하는 경우 throw MyError.error 함수가 에러를 던지면 print문이 어떤경우..

[Swift] Function Types

Swift 함수는 First Class Citizen임 1. 변수나 상수에 저장할 수 있다. 2. 파라미터로 전달할 수 있다. 3. 함수에서 리턴할 수 있다. 함수의 자료형을 표현하는 방법 (ParameterTypes) -> ReturnType 이때 리턴타입이 없을때에도 없다는 것을 명시적으로 ()로 표현해주어야 함 파라미터가 없는 goodMorning이라는 함수를 만듦 FirstClassCitizen 첫번째 특징처럼 상수나 변수에 함수를 저장할 수 있음 이 상수 d1에 ()를 붙여서 함수를 호출해보았다. 굿모닝 잘나옴 파라미터의 자료형이 String타입인 함수를 만들었다. 직접 자료형을 선언해주어 p2에 badmorning을 저장해보았고 p3에는 형식추론을 통해 함수를 저장했다. 이때 p2로 펑소처럼 ..