반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 라이트모드
- SwiftLint
- UIButton
- dictionary
- RxSwift
- SwiftUI
- ios
- github
- Firebase
- autolayout
- NavigationLink
- remote config
- Java
- UITabBarController
- WebView
- string
- Swift
- swipe
- Observable
- Alamofire
- UIScrollView
- subscript
- Realtime Database
- 다크모드
- 문자열
- Apple
- LazyHStack
- Android
- gcd
- 웹뷰
Archives
- Today
- Total
점진적 과부하 개발 블로그
Swift 문법 정리 1 본문
반응형
변수와 상수
- 값(숫자)을 저장할 수 있는 저장 공간을 뜻한다.
- 변수 = 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("강아지")
}
연산자
- https://docs.swift.org/swift-book/LanguageGuide/BasicOperators.html
- https://developer.apple.com/documentation/swift/swift_standard_library/operator_declarations
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 |