본문 바로가기
🍎iOS프로그래밍/겨울방학 특강

[복습] Swift문법 간단 정리-1

by 둥둥동동# 2022. 1. 4.
728x90

Swift문법 간단 정리-1

개요

상수, 변수, 데이터 타입

튜플

옵셔널

형변환

타입검사

Any, AnyObject 타입

Nil Coalescing Operator (Nil 합병 연산자)

제어문

 

개요

 

Swift 문서 확인하기

1. Swift

https://www.swift.org/

 

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 = (10true"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 = (10true, 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)

 

728x90

'🍎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

댓글