Swift문법 간단 정리-1
개요
상수, 변수, 데이터 타입
튜플
옵셔널
형변환
타입검사
Any, AnyObject 타입
Nil Coalescing Operator (Nil 합병 연산자)
제어문
개요
Swift 문서 확인하기
1. Swift
Swift.org
Swift is a general-purpose programming language built using a modern approach to safety, performance, and software design patterns.
www.swift.org
2.Apple
https://developer.apple.com/kr/swift/
Swift - Apple Developer
Swift는 iOS, macOS, tvOS 및 watchOS에서 사용할 수 있는 강력하면서도 직관적인 프로그래밍 언어입니다. Swift 코드 작성은 대화식으로 재미있고, 구문은 간결하면서도 표현력이 풍부하며, Swift에는 개
developer.apple.com
Swift 스타일 가이드
https://github.com/swift-kr/swift-style-guide-raywenderlich/blob/master/ko_style_guide.md
GitHub - swift-kr/swift-style-guide-raywenderlich: The official Swift style guide for raywenderlich.com.
The official Swift style guide for raywenderlich.com. - GitHub - swift-kr/swift-style-guide-raywenderlich: The official Swift style guide for raywenderlich.com.
github.com
상수, 변수, 데이터 타입
데이터 선언 예시
var myNumber:Int = 10
let MyNumber:Double = 3.5
|
cs |
변수선언 var / 상수선언 let
데이터 선언시엔 = 양 옆에 일관된 공백이 꼭 필요
데이터 타입
타입확인:
type(of:변수or상수)
크기확인:
MemoryLayout<Int>.size
MemoryLayout.size(ofValue:변수or상수)
타입 어노테이션 : 변수or상수에 데이터타입을 명시하는것
타입 추론 : 타입 어노테이션이 없는 경우 컴파일러가 데이터를 식별하는 행위
데이터 타입 | 종류 | 비고 |
정수형 | Int Int8, Int16, Int32, Int64 UInt8, UInt16, UInt32, UInt 64 |
기본형 Int 권장 |
실수형 | Double (64bit) Float(32bit) |
어노테이션 생략시 자동으로 Double |
부울 | Bool | true, false |
문자 | Character | ""(큰따옴표)를 사용, 어노테이션 생략시 자동으로 String |
문자열 | String | 문자열 보간 \() 형식으로 문자들을 조합할 수 있음 |
문자열 보간 예시
var myName = "김길동"
var message = "저는 \(myName) 입니다"
|
cs |
튜플
Swift의 강력한 기능, 서로 다른 데이터 여러개를 개체 하나에 일시적으로 묶음
-삽입되는 데이터는 모두 달라도 됨
-lable을 지정할 수 있음
-Swift에서 _는 무시를 의미
ex)
let myTuple = (10, true, "R")
let SomeInt = myTuple.0
print(type(of:SomeInt))//Int
print(type(of:myTuple))//(Int,Bool,String)
|
cs |
let myTuple = (T1:10, T2:true, "T")
var (m1, _, m2) = myTuple
print(m1, m2)//10 T
print(type(of:myTuple))//(T1:Int, T2:Bool, String)
|
cs |
let myTuple = (10, true, T3:"TT")
var SomeString = myTuple.T3
print(SomeString)//TT
|
cs |
옵셔널
열거형(enum)으로 아래의 형태를 가집니다
public enum Optional<Wrapped>{
case none
case some(Wrapped)
}
|
cs |
때문에 아래의 형식으로 옵셔널타입을 작성할 수 있습니다
var x : Int? = 20 //.some(20)
var y : Int? = Optional.some(10)
var z : Int? = Optional.none
var x : Optional<Int> = 30
print(x,y,z,x1)
|
cs |
nil값을 가질 수 있는 데이터 타입
nil: 값을 갖지 않는다
선언형태 | 설명 | 예시 |
Int? | 일반적인 옵셔널타입 선언방법 | let a : Int? =1 let b : Int = a //불가능 let c = a //optional(1) |
Int! | 값을 사용할 때 강제 언래핑을 실행하기 때문에 Int값만 가진다는 확신이 있을때만 사용 |
let a : Int! = 1 let b : Int = a //1 let c = a //optional(1) let d = a+1 // 2 |
옵셔널 바인딩
if let (var도 가능)
if let temp = optionalName {
//옵셔널변수를 언래핑할 수 있다면 실행, 언래핑된 값은 temp에 저장
// temp 상수는 if let블럭내에서만 사용이 가능
}
if let temp1 = op1, let temp2 = op2 {
//여러개도 언래핑 가능
}
|
cs |
guard let (var도 가능)
guard let temp = optionalName else{//nil값일 경우실행, return같이 조기에 종료시킬 때 사용}
//temp 상수는 계속 사용이 가능
|
cs |
형변환
as 연산자를 통해 타입변환
업캐스팅
자식인스턴스 as 부모클래스 //자식이 더 많은 기능을 가짐(부모클래스를 준수하였음) ∴ 안전한 캐스팅
다운캐스팅
부모인스턴스 as? 자식클래스 //경우에 따라 성공 또는 실패할 수 있음 ∴불완전한 캐스팅
이 경우에 as! as? 형식으로 형변환을 함
타입검사
인스턴스 is 클래스
해당 인스턴스가 클래스의 인스턴스인지 판단
상속관계에도 true를 반환
class A {}
class B: A {}
class C {}
let a=A()
let b=B()
let c=C()
print(a is A) //true
print(b is A) //trun
print(c is A) //false
|
cs |
Any AnyObject 타입
AnyObject
어떠한 클래스 객체라도 저장할 수 있음 (구조체, 열거형은 불가)
가장 추상화된 최상위 타입
Any
AnyObject보다 더 포괄적인 의미
클래스, 구조체, 열거형, 함수타입 가능
Nil Coalescing Operator(Nil합병연산자)
var defaultValue = 1
let optionalValue:Int? = 3
var temp = optionalValue ?? defaultValue
print(temp) //3
//nil값이 아닌경우 언래핑 후 값할당
|
cs |
제어문
for문 (for-in)
for(var i = 0 ; i < 10 ; i++){ } //Swift3에서 없어진 문법
for i in 0..<10 { } 으로 변경
for _ in 0..<5 { } //참조체 없이 5번 반복
let cars = ["Avante","Sonata"]
for car in cars {} // 배열 접근
let numberOfWheels = ["car":4, "cycle":2]
for (name,wheels) in numberOfWheels {} //dictionary 접근
|
cs |
while
while i < 10 { //()는 생략가능
i +=1
}
|
cs |
repeat-while
repeat {
} while 조건문
//do ~ while과 동일
|
cs |
if문
if문을 사용할 땐 한줄이더라도 꼭 {}블록이 필요 조건문()는 선택
for i in 0..<10 {
if i > 5 break// error 발생
}
for i in 0..<10 {
if i > 5 {break}
}
|
cs |
continue
반복문 내부에서 continu이후의 코드를 건너뛰고 반복문 시작위치로 복귀
for i in 1..<11 {
if i % 2 == 1 {continue} //i가 홀수일 때 아래를 생략
print(i) //2 4 6 8 10
}
|
cs |
guard문
var i = 5
guard i > 10 else {
print("i는 10보다 작습니다")
return
}
print("i는 10보다 큽니다")
//조건식이 false 이기 때문에 else 문이 실행되어 해당블럭이 종료됨
//else문에는 조기종료 시킬 구문 포함시키는게 좋음
|
cs |
switch case문
break문을 생략하여 사용가능
단 casr에 문장이 하나도 없을 땐 에러가 나타나므로 break문을 써줘야함
var myValue = 0
switch myValue {
case 0 :
print("0입니다")
case 1 :
print("1입니다")
fallthrough
default :
print("2이상")
}
case 1,2,3: 혹은
case 1...3: 으로 표현가능
fallthrough를 만날 때 마다 case문을 내려감
|
cs |
where절
switch, catch, if, while, gurad, for 등에 모두 사용가능
1212
var size = 90
switch (size){
case 90...100 where size % 5 == 0:
print("in stock")//in stock
case 105 :
print("sold out")
default:
print("wrong size")
}
for i in 1..<11 where i % 2 == 0 {
print(i) //2 4 6 8 10
}
|
cs |
참고자료
한성현 교수님의 유튜브 Swift강의 (https://www.youtube.com/channel/UCM8wseo6DkA-D7yGlCrcrwA)
'🍎iOS프로그래밍 > 겨울방학 특강' 카테고리의 다른 글
Swift문법 - Generic (0) | 2022.01.08 |
---|---|
Swift문법 - error handling (0) | 2022.01.08 |
Swift문법 - 옵셔널 체이닝 (0) | 2022.01.07 |
Swift문법 - 열거형,구조체 (0) | 2022.01.06 |
[복습] Swift문법 간단 정리-2 (0) | 2022.01.05 |
댓글