스위프트 문법 공부 1차
기본 문법
- import는 c++의 #include와 비슷한 기능을 한다. 라이브러리를 불러온다.
- UIkit는 화면 View를 작성할 때 쓰는 라이브러리이다.
- Swift는 변수 선언시 자료형을 생략할 수 있다. (타입추론에 의해서)
- 자료형을 써놓고 싶은 경우에는 다음과 같이 할 수 있다.
var 변수명 : String = “변수”
- Swift는 유니코드를 지원해 준다
- 뒤에 세미콜론(;)을 붙이지 않아도 된다.
- 상수 선언의 경우 let을 이용한다.
let 변수명 = “변수”
- 자료형
var string: String = “String” var integer: Int = 1004 var float: Float = 1.004 var double: Double = 1.004 var integerList: [Int] = [1, 2, 3, 4] var stringList: [String] = [“a”, “b”, “c”] var dict: [String: Int] = [“a”:1, “b”:2, “c”:3]
integerList[0..<2]
에서 0..<2는 0~1번째를 나타낸다.- Swift는 ++, —가 없다. += -=는 있다.
조건문
if문
괄호 생략이 가능하다
switch문
switch a {
case 1:
print(“1”) -> break문이 없어도 자동으로 빠져나간다.
default:
print(“default”)
}
반복문
for문
for i in 0..<10 { print(i) }
는for i in 0…9 { print(i) }
로 쓸 수 있다.- reserved()를 사용할 수 있다.
let items = [1, 2, 3, 4, 5] for i in items.reserved() { print(i) }
- 리스트의 index, value 출력이 가능하다.
let items = [1, 2, 3, 4, 5] for(index, value) in items.enumerated() { print (“\(index) \(value)”) }
리스트는 순서대로 나온다.
- dictionary의 경우,
let dict = [“a”:1, “b”:2, “c”:3] for item in dict { print(“\(item.key) : \(item.value)”) }
역슬래시를 이용하여 c언어 문법의 %d처럼 string 안에 변수를 특수한 문법을 이용해서 넣을 수 있다. 딕셔너리는 순서 보장을 해주지 않아서 넣은 대로의 값이 나오지 않는다.
Class
class Human {
var name: String = “” -> init 안써도 에러 안남
var age: Int = 0 -> init 안써도 에러 안남
var gender: String -> init 필요
// init () 은 생성자 역할을 한다.
init () {
//this 대신에 self를 쓴다.
self.gender = “male”
}
var human = Human ()
-> c++에서 처럼 new가 없어도 된다. 사용할 때는human.name, human.age, human.gender
처럼 사용class Hyowon: Human { override init() { super.init() self.name = “Hyowon” self.age = 23 self.gender = “female” } func say() { } func newYear() -> Int { // ->Int 는 리턴 자료형이 Int임을 명시한다. self.age += 1 return self.age } func changeName(newName: String) { // 파라미터 받는 경우 self.name = newName } } hyowon.changeName(newName: “hyowonee”) // 파라미터에 이런식으로 값을 전달
Optional
var string: String?
?는 nil이거나 String임을 의미string = “쀼”
print(string) -> Opitional(“쀼”)
print(string!) -> (“쀼”)
!는 확실한 경우에 붙인다.var hyowon: Hyowon = Hyowon()
,var name: String?
이라고 하자.hyowon.name?.func()
이라는 코드가 있을 때, 이는if (hyowon.name != nil) { hyowon.name.func() }
과 같기 때문에
hyowon.name
에서 name뒤에 뭐가 붙는다면 ?를 붙이고 name자체로만 쓴다면 붙이지 않아도 된다.
Optional Binding
if var (let) email = optionalEmail {
print(email) // optionalEmail에 값이 존재하면 해당 값을 출력한다.
} // 값이 존재하지 않으면 if문을 그냥 지나친다.
if let name = optionalName, (let) email = optionalEmail {
// name과 email 값이 다 존재
}
var optionalAge: Int? = 22
if let age = optionalAge, age >= 20 {
// age값 존재, 20 이상인 경우
}
Optional Chaining
- optional 선언된 배열을 빈 배열인지 검사하려고 한다.
let array: [String]? = [] var isEmptyArray = false if let array = array, array.isEmpty { isEmptyArray = true } else { isEmptyArray = false }
이 코드를
let isEmptyArray = array?.isEmpty == true
#swift 로 쓸 수 있다.
- array가 nil인 경우
array?
는 nil을 반환 - array가 빈 배열인 경우
array?.isEmpty
가 true를 반환 - array에 요소가 있는 경우
array?.isEmpty
가 false를 반환
- array가 nil인 경우