스위프트 문법 공부 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문

  1. for i in 0..<10 { print(i) }for i in 0…9 { print(i) }로 쓸 수 있다.
  2. reserved()를 사용할 수 있다.
    let items = [1, 2, 3, 4, 5]
    for i in items.reserved() { print(i) }
    
  3. 리스트의 index, value 출력이 가능하다.
    let items =  [1, 2, 3, 4, 5]
    for(index, value) in items.enumerated() {
     print (“\(index)  \(value))
    }
    

    리스트는 순서대로 나온다.

  4. 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 로 쓸 수 있다.

    1. array가 nil인 경우 array?는 nil을 반환
    2. array가 빈 배열인 경우 array?.isEmpty가 true를 반환
    3. array에 요소가 있는 경우 array?.isEmpty가 false를 반환

Choi Hyowon

열심히 공부 중 입니다.