SWIFT 문법 정리 - 1
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. 옵셔널의 묵시적 해제
느낌표를 붙여주면 묵시적으로 해제가 돼서 사용가능하다.