점진적 과부하 개발 블로그

Swift 문법 정리 1 본문

Swift/문법

Swift 문법 정리 1

지용빡 2022. 1. 3. 20:24
반응형
변수와 상수
  • 값(숫자)을 저장할 수 있는 저장 공간을 뜻한다.
  • 변수 = var (값 변경이 가능하다.)
  • 상수 = let (값 변경이 불가능하다.)
var 변수명: 데이터 타입 = 값
let 상수명: 데이터 타입 = 값
var example1: String = "Hi"
let example2: Int = 0
데이터 타입
데이터 타입 설명
Int 64bit 정수형
UInt 부호가 없는 64bit 정수형퓨ㅐ
String 32bit 부동 소수점
Doble 64bit 부동 소수점 
Float True, False
Bool 문자
Character 문자열
Any 모든 타입
타입 어노테이션과 타입 추론

스위프트는 타입 안전(type safe) 프로그래밍 언어

  • 변수의 데이터 타입이 식별되면 그 변수는 다른 타입의 데이터를 저장하는 데 사용될 수 없다.
  • 변수가 선언된 후에도 다른 데이터 타입을 지정할 수 있는 loosely typed의 언어와 대조적

상수와 변수의 타입을 식별하는 방법은 두 가지

  • 타입 어노테이션(type annotation)
    • 변수 또는 상수 이름 다음에 타입 선언을 두면 된다.
  • 타입 추론(type inference)
    • 선언부에 타입 어노테이션이 없으면 스위프트 컴파일러는 상수 또는 변수의 타입을 식별하기 위해 사용됨

상수를 선언할 때도 타입 어노테이션을 사용하면 나중에 코드에서 값을 할당할 수 있다.

let example1 = "Hi" // 타입 추론
let example2: Int = 1 // 타입 어노테이션
튜플(Tuple)
  • 여러 값을 하나의 개체에 일시적으로 묶는 방법 
  • 튜플에 저장되는 항목들은 어떠한 타입도 될 수 있으며, 저장된 값들이 모두 동일한 타입이어야 한다는 제약도 없다.
let example = (1,2.2,"ABC")
Optional
  • 값을 반환할 때 오류가 발생할 가능성이 있는 값은 옵셔널 타입이라는 객체로 감싸서 반환한다.
  • 값이 있을 수도 있고 없을 수도 있다.
  • 변수 또는 상수에 아무런 값이 할당되지 않는 상황을 안전하게 처리하기 위한 방법을 제공
  • nil = 값이 없음
var example: String? = nil // 데이터 타입뒤에 ? 를 붙히면 옵셔널 타입 선언이 된다.
Optional을 사용하는 이유
  • 옵셔널 타입만이 값을 갖지 않는다는 의미의 nil 값을 가질 수 있다.
  • 옵셔널 변수는 초기화하지 않으면 자동으로 nil 초기화
  • nil은 옵셔널이 아닌 변수나 상수에 할당할 수 없다. 
Optional 강제 언래핑(forced unwrapping)

변수명 뒤에 !를 붙이면 강제 언래핑(forced unwrapping)이 된다.

var x: Int?
x = 1
print(x) // Optional(10)
print(x!) // 1
Optional Binding

if let

옵셔널에 할당된 값을 임시 변수 또는 상수에 할당, 여러 옵셔널 변수를 한 번에 언래핑하는 방법은 콤마 사용

if let 상수명 = 바인딩시킬 상수, 변수명 { // 옵셔널 변수가 있다면 언래핑해서 일반 상수에 대입하고 if문 실행
	구문
    } else { false일 경우 실행 되는 구문 }

guard let

guard let 상수명 = 바인딩 시킬 상수, 변수명 else { return }
형 변환

as로 upcasting

  • 상속 관계가 있는 클래스들끼리만 타입 캐스팅 가능
  • as 연산자를 이용한 타입 변환(type casting)

as! as?로 downcasting

  • 다운캐스팅은 부모 인스턴스를 자식 클래스로 변환하는 데 사용
  • 성공 확신이 있으면 as!로 강제 변환
  • 성공 확신이 없으면 as?로 안전하게 변환
is

is 를 이용하여 값의 타입 검사(type check)

인스턴스 is 클래스
class Animal {}
var animal : Animal = Animal()
if animal is Animal {
	print("강아지")
    }
연산자
Nil-Coalescing Operator

옵셔널 변수?? nil일 때 할당되는 값

옵셔널 변수와 같이 nil이면 ?? 다음 값으로 할당됨

let defaultValue: String = "디폴트"
var example: String?

var x = example ?? defaultValue // 값이 nil이면 ?? 뒤에 defaultValue를 호출한다.

print(x) // 디폴트
조건문

 

반복문

for in 문

for 루프상수 in 순회대상 { // _로 참조체(루프 상수) 생략 가능
	실행할 구문..
    }
    
for example in 1...10 {
    print(example)
} // 1 2 3 4 5 6 7 8 9 10

while 문

while 조건식 { // false이면 반복문이 실행되지 않음
	실행할 구문
    }
    
var example = 100
while example < 1000 { // 1000까지 반복, 1000이 되면 반복문이 종료된다.
    example+=1
    }
    print(example) // 1000

repeat-while 문

repeat { // 조건식에 따라 반복이 실행되지만 적어도 한번은 구문이 실행됨 
	실행할 구문
    } while 조건식
    
var e = 10

repeat { // 적어도 반복문 한번은 실행
    e=e+1
    print(e) // 11
} while (e > 20)
break 

반복문을 탈출하고 싶을 때 사용한다.

for example in 1..<10 {
    if (example > 3) {
        break // 반복문에서 빠져나옴
    }
    print(example)
    }
switch-case 문
switch 표현식
{
	case 1:
    구문
    case 2:
    구문
    case 3:
    구문
    default:
    구문
}

var exampleNum = 10

switch exampleNum {
case 1,2,3:
    print("안녕하세요")
case 4,5,6:
    print("저는")
case 7,8,9,10:
    print("박지용입니다.") // 출력, 각 case문 마지막에 break가 자동으로 들어가 있다.
default:
    print("잘 부탁드립니다.")
}

where절을 switch-case에 부가적인 조건을 추가하기 위하여 사용한다.

var oddEven = 7

switch (oddEven) {
case 0...10 where oddEven % 2 == 0:
    print("even")
default:
    print("odd") // odd
}
fallthrough
  • 스위프트는 case문 다음에 break 문을 포함할 필요가 없다. 
  • 스위프트는 일치하는 case문을 만나면 자동으로 빠져나온다.
  • 계속 내려가고 싶게 하고 싶으면 fallthrough 문을 사용하면 된다.
var num = 2
switch (num) {
case 3:
    print("3")
    fallthrough
case 2:
    print("2")
    fallthrough
default:
    print("1")
}
// 2 1 fallthrough를 사용하면 계속 내려간다.
함수와 메서드(method)
  • 특정 작업을 수행하는 코드 블록
  • 함수 정의부의 값을 매개변수(parameter), 호출시의 값은 아규먼트(argument)라고 부른다.
  • 함수를 스위프트 클래스 내에 선언하면 메서드(method)라 부른다.
  • 함수는 여려 결과 값들을 튜플로 감싸서 반환할 수 있다.
  • 스위프트는 함수를 데이터 타입처럼 처리할 수 있다.
// 함수 선언 방법 
func 함수명(매개변수 이름: 매개변수 타입...) -> 반환값 타입 {
	함수 코드
} // 반환하지 않으면(void) 반환값 타입(void)과 ->는 생략 가능하다.

// 튜플로 여러 결과 값 반환하기
func converter(length: Float) -> (yards: Float, centimeters: Float, meters: Float) {
    let yards = length * 0.0277778 
    let centimeters = length * 2.54
    let meters = length * 0.0254
    return (yards, centimeters, meters)
}
var lengthTuple = converter(length: 10)
print(lengthTuple.yards)
print(lengthTuple.centimeters)
print(lengthTuple.meters)
내부 매개변수 이름과 외부 매개변수 이름
  • 외부 매개변수명은 호출할 때 사용한다.
  • 내부 매개변수명은 함수 내부에서 사용한다.
  • 외부 매개변수명은 생략이 가능하다.
  • 외부 매개변수명을 생략하면 내부 매개변수명이 외부 매개변수명까지 겸한다.
  • (_ x: Int) // _는 외부매개변수명을 생략한다는 의미이다.
  • Swift의 함수는 1급 객체이다. 다음 조건을 충족하는 객체를 1급 객체라고 한다.
    • 변수에 저장할 수 있다.
    • 매개변수로 전달할 수 있다.
    • 리턴값으로 사용할 수 있다.
func example(first x: Int, second y: Int) -> Int {
	     // (외부 내부: 자료형, 외부 내부: 자료형) -> 리턴형
         return(x+y)	// 함수 정의할 때는 내부 매개변수명을 사용
         }
example(first:5, second:5) // 함수 호출할 때는 외부 매개변수명을 사용해야 한다.

//외부 매개변수명을 생략하면 내부 매개변수명이 외부 매개변수명 역할을 한다.

func example(x: Int, y: Int) -> Int {
         return(x+y)	
         }
example(x:5, y:5)
가변 매개변수(variadic parameter)
  • 함수가 지정된 데이터 타입으로 0개 또는 그 이상의 매개변수를 받는다는 것을 가리키기 위해서 세 개의 점(...)을 이용한 선언
func exampleStrings(strings: String...)
{
    for string in strings {
        print(string)
    }
}
exampleStrings(strings: "일", "이", "삼", "사")
exampleStrings(strings: "one", "two", "three")
Swift 함수명
함수명(외부매개변수명:...)
func example(first x: Int, second y: Int) -> Int {}
함수명 = example(first:, second:)

*출처: iOS프로그래밍기초 한성현 교수님의 강의 내용 변형 및 요약

반응형

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

Swift 클로저(Closure)  (0) 2022.01.06
Swift guard문  (0) 2022.01.05
Swift 클래스와 구조체  (0) 2021.12.26
Swift 구조체(Struct)  (0) 2021.12.23
Swift 열거형(enum)  (0) 2021.12.23