IOS/정리(IOS)

SWIFT 문법 정리 - 1

김염인 2022. 9. 10. 22:46

SWIFT 문법정리 - 1

 데이터 타입

Bool

참(true), 거짓(false)을 표현하기 위한 타입입니다.

var someBool: Bool = false
someBool = 100	// 에러 발생! Bool 타입에 정수를 할당할 수 없습니다.

Int

정수형 타입입니다. 기본적으로 64비트 정수형 타입을 사용합니다. 대략 -922 ~ 922경까지의 정수를 다룰 수 있습니다.

var someInt: Int = 100

UInt

부호가 없는 정수 (Unsigned Integer)입니다. 대략 0 ~ 1844 경까지의 0과 양의 정수를 다룰 수 있습니다.

var someUInt: Int = 100
var someInt: Int = 1
someUInt = someInt	// 에러 발생! 같은 정수라도 타입이 다르므로 값을 할당할 수 없습니다.

Float

32비트 부동소수형 타입입니다.

var someFloat: Float = 3.14
someFloat = 1	// 소숫점을 기재하지 않아도 할당이 가능합니다.

Double

64비트 부동소수형 타입입니다.

var someDouble: Double = 3.14
var someFloat: Float = 3.14
someDouble = 3	// Float과 마찬가지로 소숫점을 기재하지 않아도 할당이 가능합니다.
someDouble = someFloat	// 에러 발생! 다른 타입이므로 할당이 불가능합니다.

Character

한 글자(문자)를 표현하기 위한 타입입니다. 값을 큰 따옴표로 감싸 표현합니다. Unicode를 사용하기 때문에 Unicode로 표현 가능한 모든 문자를 할당할 수 있습니다.

var someCharacter: Character = "😆"
someCharacter = "🐣"
someCharacter = "가"
someCharacter = "Ryan"	// 에러 발생! 한 문자가 아닌 String 타입이므로 할당이 불가능합니다.

String

Character 타입과 달리 여러 문자를 표현할 수 있습니다. Character 타입과 마찬가지로 큰 따옴표로 값을 감싸 표현합니다.

var someString: String = "하하하! 😄"
someString = someString + "웃으면 복이 와요."	// 연산자를 통해 문자열을 합칠 수 있습니다.
var someCharacter: Character = "😆"
someString = someCharacter	// 에러 발생! 다른 타입이므로 할당할 수 없습니다.

Any

Swift의 모든 타입을 지칭하는 키워드입니다.

var someAny: Any = 100
someAny = "😆"
someAny = 2.1332
someAny = "어떤 타입도 수용 가능합니다."

let someDouble: Double = 3.141592
someDouble = someAny	// 에러 발생! 타입이 다르므로 할당할 수 없습니다.
someAny = someDouble	// Any 타입이므로 할당할 수 있습니다.

AnyObject

모든 클래스 타입을 지칭하는 프로토콜입니다.

class SomeClass {}

var someAnyObject: AnyObject = SomeClass()

someAnyObject = 123.12	// 에러 발생!

nil

엄밀히 이야기하면 타입이 아닙니다. 존재하지 않음을 나타내는 키워드입니다. 타 언어의 Null을 뜻하는 키워드입니다.

var someAny: Any = nil	// 에러 발생! 어떤 데이터 타입이든 할당할 수 있지만 값이 없는 nil은 할당할 수 없습니다.
var someAnyObject = nil	// 에러 발생!

 

 컬렉션 타입

  • 데이터들의 집합 묶음

Array

  • array의 기본형
var array = [1,2,3]
  • 정식 문법으로 array를 만들기
let strArray: Array<String>
  • 단축 문법으로 array를 만들기
let strArray2: [String]

Array 만들기

// 빈 array 만들기
let emptyArray: [Int] = []

// 정식 문법으로
let emptyArray2 = Array<Int>()

// 단축 문법으로
let emptyArray3 = [Int]()

// 0 이 열개가 채워진 Int array를 만들기
let zeroArray = [Int](repeating: 0, count: 10)

 

Dictionary

Dictionary는 사전과 유사한 형태로 데이터를 저장한다.

  • 저장된 요소는 정렬되지 않는다.(Unordered Collection) - 정렬의 의미가 없음.
  • Dict에 저장되는 자료형은 모두 같아야 한다. key와 value이 쌍으로 저장되는데 key와 value의 자료형이 모두 같아야 한다.

Dictionary

[key: value, key: value, key: value, ...]
var dict = ["A" : "Apple", "B" : "Banana"]
dict = [:] // 빈 배열

 

Set

// 중복을 허용한다. -> Array
let array = [1,2,3,3,3,3]
array.count // 6

// 중복허용 하지않음. -> Set
let set: Set<Int> = [1,2,3,3,3,3] // {2, 1, 3}
set.count // 3

Inspecting a Set/Testing for Membership

set.count

set.isEmpty

set.contains(1)

 

 

 함수

  • 가장 작은 단위이자 코드 집합

 

func 함수명(파라미터이름:데이터타입) -> 반환타입{
	return 반환값
}

 

Example)

func sayHello(personName: String) -> String {
    let greeting = "Hello, " + personName + "!"
    return greeting
}

func키워드를 앞에 사용하며, 함수의 반환 타입과 반환 방향 ->를 나타내고 그 뒤에 반환 타입의 이름을 사용함.

함수 정의는 함수가 어떤 작업을 하는지, 인자의 값을 예상하고, 완료되면 무엇을 반환하는지 설명함. 함수 정의는 함수가 코드 안에서 호출되면 명확하고 명백한 방법으로 사용하게 함.

println(sayHello("Anna"))
// prints "Hello, Anna!"
println(sayHello("Brian"))
// prints "Hello, Brian!"

 

 조건문

if 조건 {  do something
} else {
  do something}

 

 

Switch 문 역시 다른 언어의 그것과 사용방법은 비슷합니다.

let someInteger = 100

switch(someInteger){
case 0:
	print("zero")
case 1..<100:
	print("1~99")
case 100:
	print("100")
case 101..Int.max:
	print("over 100")
default:
	print("unknown")
// 100


switch("ssionii"){
case "mina":
	print("mina")
case "ssionii":
	print("ssionii")
default:
	print("unknown")
// ssionii

 

 

 반복문

 

for-in

기존 언어의 for-each 구문과 유사하다. Dictionary의 경우 이터레이션 아이템으로 튜플이 들어온다.

var integers = [1, 2, 3]
let people = ["ssionii": 10, "eric": 15, "mike": 12]

for integer in integers {
	print(integer)
}

for (name, age) in people {
	print("\(name): \(age)")
}

while

while integers.count > 1 {
	integers.removeLast()
}

repeat-while

기존 언어의 do-while과 유사

repeat {
	integers.removeLast()
} while integers.count > 0

 

 

 옵셔널

  • 값이 있을 수도 있고 없을 수도 있다.
var number : Int? = nil
var name : String? = nil

 

  • 옵셔널 바인딩

1. 명시적 해제 - 강제 해제 / 비강제 해제(옵셔널 바인딩)

2. 묵시적 해제 - 컴파일러에 의한 자동 해제 / 옵셔널의 묵시적 해제

 

1. 명시적 강제 해제 (위험함)

1-1. 명시적 비강제 해제

Guard문

 

2. 묵시적 해제(컴파일러에 의한 자동 해제)

여기서 value가 6입니다 출력 된다. 그 이유는 컴파일러에 의해 옵셔널이 자동적으로 해제 된다

 

2-1. 옵셔널의 묵시적 해제

느낌표를 붙여주면 묵시적으로 해제가 돼서 사용가능하다.