관리 메뉴

사적공간

swift 기본문법 본문

ios/문법

swift 기본문법

2sac 2023. 2. 16. 17:13

출처 :꼼꼼한 재은씨의 swift 문법/이재은/루미페이퍼 

swift는 객체지향형 성격을 지닌 스크립트 스타일 언어 

 

헤더파일 작성 필요 없음 :  헤더파일과 소스파일이 통합된 하나의 *.swift 파일에서 필요한 내용을 자유롭게 정의하고 사용하면 됨. 

클래스와 구조체를 선언시에 정의와 구현을 분리하지 않고 통합하여 작성. 

 

헤더파일 : 전역변수 선언 담당 / 소스파일 : 선언된 함수 구현 

 

대소문자 구분함. / 함수와 메스도, 인스턴스명의 첫글자는 소문자, 클래스와 구조체 프로토콜 등의 객체의 첫 글자는 대문자. 

 

구문 끝 세미콜론 불필요, 

 

엔트리 포인트(시작점)으로 사용되는 main()함수가 없음. @UIApplicationMain 어노테이션을 쓰서 앱을 시작하는 객체를 지정하며, 이건 하나뿐임 .

 

문자열 뿐만 아니라 문자도 큰따옴 표를 씀, 그래서 명시적으로 타입 어노테이션으로 문자는 Chareacter 타입을 지정해 주어야 함. 

 

impfort 키워드를 사용하지만, 라이브러리와 프레임워크의 참조 용도임. c처럼 객체가 정의된 헤더파일을 반입하는 용도가 아님. 

 

c나 자바처럼 한 줄 주석, 여러 줄 주석 처리 방식을 모두 사용할 수 있음. 주석안에 주석을 쓰는 것도 가능 

 

try ~catch 방식의 오류 처리를 지원함. 함수나 메소드가 리턴값 또는 매개변수를 이용하지 않고 외부로 직접 오류를 던지는 걸 말함 . 그 대신 오류 방지인 옵져널을 권고함. 

 

초기화 과정에서 변수나 상수의 타입이 결정됨 .타입추론기에 의해서

 

변수는 선언과 초기화를 분리할 수 있지만, 상수는 아니다. 

 

알파벳과 한글 자음 및 모음, 아라비아 숫자를 사용할수 있으며 특수기호나 한자, 이미지용 바이너리 코드까지 변수와 상수이름을 쓸 수 있음. 

 

연산자와 혼동할 수 있는 [+,-,*,/] 및 백은 변수, 상수이름으로 사용할 수 없음. 단 언더바_ 는 가능. 

 

스위프트에서 예약어나 키워드로 등록되어 있는 단어는 변수나 상수이름으로 사용할 수 없음. 단 대소문자를 바꾸어 사용하는 것음 가능 . 

 

변수, 상수명의 첫 번째 자리에 숫자가 올 수 없음. 

 

정수와 실수를 연산하면 실수로 처리됨.  

 

8bit = 256개 값 저장가능. 표현 범위는 -128 ~ 0~127(128개씩 2개)  

 

 

UInt, 부호없는 정수 0부터 양수 방향으로만 카운트함. 

 

double(64), Float(32)

 

bool = true, false 

 

string은 character + character ... 임 

 

타입 어노테이션을 해야 하는 경우 두 가지 : 1. 선언과 초기화를 분리할 경우 2. 타입 추론이 얻어지는 타입이 아닌, 다른 타입을 저장할 필요가 있을 때 ex) Int 대신 float나 doble을 쓰거나, string 대신 character 를 쓸 때, double 대신 float 를 쓸 때. 

 

타입 변경은  ' 바꾸고 싶은 타입(바꿀타입)'

-> 문자열 템플릿으로 편해짐  '\(  변수나 상수   )

문자템플릿

 

문자 템플릿 연산가능

 

 스위프트는 " " 더블 쿼우팅을 생략하고 변수에 값을 집어 넣었을 때, 이것을 문자로 보지 않고 의미저긴 해석을 시도한다. 

1. 예약어, 키워드 판단 

2. 함수나 클래스, 구조체, 열거형.. 객체 타입 이름인지 확인하고 

3. 변수나 상수로 정의된 건지 확인한다. 

 

3. 의 경우

문자와 문자열 모두 더블 쿼우팅으로 처리함. 

 

1. 주어진  타입 a와 b에 동시에 속하는 경우, 더 넓은 범위의 타입으로 결정함. 

2. 더 작은 범위의 타입으로 정의하려면 반드시 타입 어노테이션을 통해 명시적으로 선언함. 

 

 

스위트프에서 여러 줄 문자열 처리하는 방법 

 

 

멀티 라인 스트링 

시작 쿼우팅 다음에는 반드시 줄바꿈 후 작성하고 이후 어떤 값도 들어가선 안되며, 멀티라인 스티링의 입력을 끝내고 줄바꿈 해야하고 안에 특수문자 넣으면 그대로 출력.

 

 

범위 연산자 

 

값 사이의 범위를 일정한 정수 간격으로 표현하는 연산자임. 

-닫힌범위 연산자 1...3

-반 닫힌범위 연산자 1..<3 

 

 

 

여러 줄로 작성해야 하는 구문은 세미콜론 ; 으로 구분함. 

var i - 0 ; i =i + 1 ; print("reuslt = \( i )" )

 

코드블록은 { }로 구성 

 

 

 for <루프상수> in <순회대상> {

<실행할 구문> 

 

<순회대상> 데이터 타입  : 배열, 딕셔너리, 집합, 범위데이터, 문자열 

 

 

 

 

루프상수의 생략 

 

b 변수 왼쪽열에 0을 5번 채우는 반복문 ,루프상수가 필요없어서 _언더바로 생략

 

while true .. 는 무한루프 

 

repeat ~ while 문은 do ~ while 문과 같음 

 

 

 스위프트는 if 조건문에서 0과 1을 허용하지 않음. 

 

if 문을 여러개 쓰면 조건이 맞는 것을 찾아도 남은 if문의 조건을 계속 확인하는 반면 여러개의 if문으로 인식하고 

else if 문의 경우에는  찾으면 끝나고, 하나의 구문으로 인식함. 

 

동시에 일어날 수 없는 이율배반사건을 만족하기 위해 if else문이 있음. 

 

guard 구문은 주로 후속코드들이 실행되기 전에 특정 조건을 만족하는지 확인용도로 씀. 특정조건을 만족하지 않으면 조기종료를 위한 목적임. 그래서  <조건식 또는 표현식의 결과가 false 일 때 실행될 코드 >에 return이나 break문 같은 구문이 포함됨. gurard문은 참이면 실행하지 않고, 거짓이면 코드블럭을 실행하게 되어 있음. 

 

guard < 조건식 또는 표현식> else {

<조건식 또는 표현식의 결과가 false 일 때 실행될 코드 > } 

 

 

 

API가 버전을 탄다. : ios 버전이 업그레이드 될 때마다 개량을 거듭하여 동일한 api에 버전이 다른 ios에서의 사용이 종종 제한되기 때문임. 그래서 공식문서 확인해서 사용 가능한 os 버전을 확인해야 함. 그때 #available 문을 사용함. 

 

 

if #available(<플랫폼이름, 버전>, <...>,<...>,<*>) {

<해당 버전에서 사용할  수 있는 API 구문>

} else {

<API를 사용할 수 없는 환경에 대한 처리> 

 

스위프트의 switch 구문은 일치하는 비교 패턴이 있을 경우 해당 블록의 실행 코드를 처리하고, 더이상의 비교 없이 전체 분기문을 종료함. 설사 일치하는 분기문이 여러개 있다 하더라도 맨 처음 일치하는 case 구문 하나만 실행함. 

 

 

fallthrough 구문은 명시적으로 작성해야 함. 

 

패턴상 case 세 구문 모두 조건을 만족함. 여기선 첫번째 조건에 걸려서 첫번째만 출력된 것임.
범위연산자와 switch 문을 함께 씀.

 

 

 

튜플과 스위치문

 

제어전달문은 아래와 같이 있음. 

 

break

continue 

fallthrough

return 

 

반복문이 다 돌기 전에 break로 탈출가능
continue 문은 다음 반복문의 조건을 다시 확인함.

 

if문을 거치지 않으면 result.append(char)로 문자 하나가 그대로 result로 저장되고, if문을 거치면 문자 하나가 변환된 이후에 result에 저장된다. 

 

반복문이나 조건문들을 중첩하여 사용할때, break 문이나 continue 문의 흐름제어가 어디서 일어나야 할지 명확하지 않다.

그래서 반복문이나 조건문의 특정구문에 레이블을 붙이고 이 레이블을 break 나 continue. 문에 붙여서 정확한 흐름제어를 만든다. 

 

break outer에 걸려서 외부 반복문이 종료됨.

'ios > 문법' 카테고리의 다른 글

Swift 구조체와 클래스: 객체지향 스위프트  (0) 2023.03.09
Swift 함수  (0) 2023.02.22
옵셔널 Optional  (0) 2023.02.22
swift 집단 자료형  (0) 2023.02.17