• 기본 할당 연산자

    ㄴ 할당 연산자(=)는 두 개의 피연산자를 가짐

      var x: Float? 	// 옵셔널 Float 변수를 선언함
      var y: Float?
      y = 10 
      x = 12.5 	     // 값을 x에 할당함, Optional(12.5)
      x = x! + y! 	 // x + y의 결과를 x에 할당함, 연산은 같은 형끼리 가능
      print(x) 		   //Optional(22.5)
      x = y 		     // y의 값을 x에 할당함
      print(x)		   //Optional(10.0)
    
    • 옵셔널 사용이유
      • 옵셔널 타입만이 값을 갖지 않는다는 의미의 nil 값을 가질 수 있음
      var ho = nil            // error
      var ho : Int? = nil     // OK
      var ho : Int?           // OK, 위와 같은 코드  옵셔널 변수는 초기화하지 않으면 자동으로 nil로 초기화
      var sh : String = nil   // 유효하지 않은 코드
      let myConstant = nil    // 유효하지 않은 코드
    
  • 범위 연산자
    • 닫힌 범위 연산자(closed range operator)
      • ㄴ x에서 시작하여 y로 끝나는 범위에 포함된 숫자
      let words = ["a","b","c","d"]
      for word in words[1...]{      //[...1] = a b [..<2] = a
        print(word)	                //b c d
      }
    
  • Nil-Coalescing Operator (Nil합병연산자) ??
    • 옵셔널변수 ?? nil일 때 할당되는 값
      let defaultAge = 2					
      var age : Int?					
      age = 3							
      print(age)    	//Optiona(3)				
      var myAge = age ?? defaultAge				
      print(myAge)  	//3					
    
    • 옵셔널 변수의 값이 nil이면 ?? 다음 값으로 할당됨
      let defaultAge = 2
      var age : Int?
      //age = 3
      print(age)    //nil
      var myAge = age ?? defaultAge
      print(myAge)  //2
    
      let defaultword = "Hi"
      var userDefinedword: String?                   // defaults to nil
      var myWord = userDefinedword ?? defaultword    //nil이므로 defaultword인 HI 할당
      print(myWord)                                  //Hi
      userDefinedword = "Hello"
      myWord = userDefinedword ?? defaultword        //nil이 아니므로 원래 값인 Hello가 할당됨
      print(myWord)                                  //Hello, 주의 optional(Hello)가 아님
    
  • For-in 반복문
    • 컬렉션 또는 숫자 범위 내에 있는 목록을 반복

        for _ in 1...5 {    //_ 로 참조체(i) 생략 가능
        print("현호")       //현호 현호 현호 현호 현호
        }
        for i in 1...5 {
        print("\(i) 현호")  // 1 현호 2 현호 3현호 4현호 5현호
        }
      
    • 반복문 탈출 (break)

      for i in 1..<10 {
      if (i > 6) {	//중괄호 필수 사항 괄호는 안하는 추세
        break
      } 
      print(i)		//1 2 3 4 5 6
      }
    
  • 배열의 항목 접근

      let color = ["red","blur","yellow","green"]
      for i in color {
      print(i)          //red blur yellow green
      }
    
  • dictionary의 항목 접근
    • dictionary는 key:value형식의 배열
      let itword = ["C": 1, "C++": 2, "C#": 3]		// 숫자가 높은 순으로 출력된다				                              
      for (itname, level) in itword {
      print("\(itname)언어 레벨은 \(level) 입니다")		//C#언어 레벨은 3 입니다
      }						                                    //C++언어 레벨은 2 입니다
      						                                    //C언어 레벨은 1 입니다
    
  • 타입 검사(is)
    • is 키워드를 이용하여 값의 타입 검사(type check)
      class H {}	
      var h : H = H()
      if h is H{      //지정된 객체가 H 라는 클래스의 인스턴스인지 검사
      print("Hello") 	//Hello    h는 H의 인스턴스이다
      }
    
  • While 반복문
    • 어떠한 조건이 되기 전에 대체 몇 번 정도 반복해야 할지를 알 수는 없지만 그 조건을 만족할 때까지는 반복해야 하는 경우 while 반복문 사용
      var myCount = 0
      while myCount < 1000 {
      myCount+=1   			 //999까지 하고 +1
      }
      print(myCount)			 //1000
    
    • repeat-while 반복문
      • do … while 반복문을 대신하는 문
      • repeat … while 반복문의 몸체는 적어도 한번은 실행
        var i = 10
        repeat {
        i=i-1
        print(i) 				//9876543210
        } while (i > 0)
      
  • Continue문
    • 반복문에서 continue문 이후의 모든 코드를 건너뛰고 반복문의 상단 시작 위치로 돌아감
      for i in 1...10 {						
      if i % 2 == 0 {						
      continue							
      }							
      print(i)	//1 3 5 7 9 					
      }							
    
      for i in 1...10 {
      if i % 2 != 0 {
      continue
      }
      print(i)	//2 4 6 8 10
      }
    
  • IF문
    • Swift 언어는 if 문 다음의 실행 코드가 한 줄이라도 괄호({})를 필수적으로 사용해야 한다.

        var x = "안녕"
        if x == "안녕" {
        print("반가워")
        }else{
        print("누구세요")
        }
      
        var num = 3
        if (num == 1 || num == 3){
        print("당신은 남성이군요!\n")
        }else if (num == 2 || num == 4){
        print("당신은 여성이군요!\n")
        }else {
        print("당신은 대한민국 사람이 아니군요!\n")   // 당신은 남성이군요!
        }						
      
  • Guard문(조건식이 거짓이면 실행)
    • Guard문은 표현식이 거짓(false)으로 판단될 경우에 수행될 else 절을 반드시 포함해야 함
    • Guard문은 기본적으로 특정 조건에 맞지 않을 경우에 현재의 함수나 반복문에서 빠져 나갈 수 있도록 하는 ‘조기 출구(early exit)’ 전략을 제공
      func multiplyByTen(value: Int?) {
      guard let number = value, number > 40 else { //조건식이 거짓일 때 실행 number 가 40보다 작으므로 실행
      print("수가 40보다 크다.")
      return
      }
      print(number*10)                             //조건식이 참일 때 실행, 주의 : number를 여기서도 사용 가능
      }
      multiplyByTen(value: 3)                      //수가 40보다 크다.
    
      func printName
      (firstName:String, lastName:String?){
      // if let
      if let lName = lastName{
      print(lName,firstName)
      }
      else{
      print("성이 무엇인가요?")			//nil 일 때 출력
      }
      // guard let
      guard let lName = lastName else{
      print("성이 무엇인가요?")				//nil 일 때 출력
      return						//nil 일 때 종료 지점 
      }
      print(lName,firstName)
      }
      printName(firstName:"현호", lastName:"신")		//신 현호 신 현호
      						//lastName:nil = 성이 무엇인가요? 성이 무엇인가요?
    
  • Switch - case 문
    • 각 case문 마지막에 break가 자동으로 들어 있음
      let grade: Character = "A"
      switch grade {
      case "A":
      print("Perfect")			// 프린트 되는 케이스가 하나도없으면 안된다.
      case "B":
      print("That's a shame")
      default:
      print("cheer up bro")
      }				//Perfect
    
    • Switch - case 문 결합

        var value = 3
        var days : Int = 0 
        switch(value)
        {
          case 1,3,5,7,8,10,12:
          print("31일 입니다.")
          case 4,6,9,11:
          print("30일 입니다.")
          case 2:
          print("28 or 29 일 입니다.")
          default:
          print("월을 잘못 입력하셨습니다.")
        }						//31일 입니다.
      
    • Switch - case 문 범위 지정 매칭

      let num = 95
      let grade : String
      switch num {
        case 0...50:
         grade = "F입니다"
        case 51...60:
          grade = "E입니다"
        case 61...70:
          grade = "D입니다"
        case 71...80:
          grade = "C입니다"
        case 81...90:
          grade = "B입니다"
        case 91...100:
          grade = "A입니다"
        default:
          grade = "낙제입니다"
      }
      print("\(grade).")			// A입니다.
    
    • Switch - case 문 where절 사용
      var temperature = 36
      switch (temperature)
      {
      case 0...20 where temperature % 2 == 0:		//홀수 짝수 검사
      print("저체온증 입니다")
      case 21...37 where temperature % 2 == 0:
      print("평균 체온 입니다")
      case 38...50 where temperature % 2 == 0:
      print("고열 입니다")
      default:
      print("사망하셨습니다.")				//홀수면 나오는 값
      }						                    //평균 체온입니다.
    
  • Fallthrough (case 일치해도 계속 진행)
    • case문 다음에 break 문을 포함할 필요가 없다
    • case별로 빠져 나가지 않고 아래로 계속 내려가게 하려면 Fallthrough 문을 사용한다
      let grade : Character = "A"
      switch (grade) 
      {
      case "A":
      print("Perfect")			
      fallthrough
      case "B":
      print("That's a shame")
      fallthrough
      default:
      print("cheer up bro")
      }				//Perfect That's a shame cheer up bro
    
  • 학습
    • where 절이 들어간 for/switch 문
      let howords: [(Int, Int)] = [(1, 2), (1, -1), (1, 0), (0, 2)]
    
      for howord in howords {
    
          switch howord {
    
          case let (x, y) where x == y:
    
              print("x = y")					// x = 1
    
          case let (x, y) where x == -y:
    
              print("x = -y")					// x = -y
    
          case (let x, let y) where x > y:
    
              print("x > y")					// x > y
    
          case (1, _):
    
              print("x = 1")
    
          case (_, 2):
    
              print("y = 2")					// y = 2
    
          default:
    
              print("숫자를 조건에 맞게 다시 넣어주세요.")
    
          }
    
      }