Logseq/pages/Swift.md
2026-01-09 18:58:13 +09:00

5.7 KiB
Raw Blame History

deck:: Logseq/coding tip

  • ► 배열 선언 및 초기화

    • ◼︎ 1차원 배열

      • ● 1부터 10까지를 요소로 가지는 배열 생성하기(2가지 방법) #card

        id:: 691ed199-9a79-4333-9bb2-7795990e158e
        • var arr = Array(1...N)
          var arr = (1...N).map{$0}
          
      • ● 모든 요소가 0인 길이 10의 배열 생성하기 #card

        id:: 691ed271-962d-434b-9850-a7e3220421a5
        • var arr = Array(repeating: 0, count: 10)
          
    • ◼︎ 2차원 배열

      • ● 모든 요소가 0인 N*M 크기의 배열 생성 #card

        id:: 5ff9dc64-e39e-45a5-8c66-222619db3651
        • var arr = Array(repeating: Array(repeating: 0, count: M), count: N)
          
      • ● N*M 크기의 2차원 배열의 각 요소가 현 요소의 행과 열을 가지는 튜플이 되도록(1-base index) #card

        id:: f91d7c74-dd80-40c2-9a15-d9f5a0eeb61b
        • var arr = (1...N).map{ row in
              (1...M).map{ col in
                   (row, col)      
              }
          }
          
  • ► 비 고차 내장함수 모음

    • ◼︎ stride()

      • 정의
        • 일정한 간격으로 숫자 {{c1 시퀀스}}를 생성하는 함수. extra:: python의 range와 비슷함. id:: 6960b576-ad59-4da0-bd9b-cdc8a293e99e
      • 파라미터
        • stride의 파라미터는 {{c1 from}}, {{c1 to}}, {{c1 through}}, {{c1 by}} 이다. extra:: (from, to, by) 혹은 (from, through, by) 조합으로 쓰인다. id:: 6960b5b7-4154-4ed8-adc1-1f1d8d5b70d2
        • 파라미터 타입은 정수형(Int, Int8, UInt 등등)뿐 아니라 {{c1 실수형(Double, Float)}}도 가능하다. id:: 6960b6dc-ce22-47fb-9d7c-2615053e8abd
        • stride(from: a, to: b, by: c) 의 의미는? id:: 6960b6af-74bd-43cc-9124-eb59c73027d2 :-> a부터 시작해서 b까지 c 간격으로 시퀀스를 생성함(이때 b는 포함되지 않음)
        • stride(from: a, through: b, by: c) 의 의미는? id:: 6960b79d-7044-4c17-953e-8e2eac6470f9 :-> a부터 시작해서 b까지 c 간격으로 시퀀스를 생성함(이때 b도 포함됨.)
      • 예제코드
        • 0부터 1 사이를 0.1간격으로 나눈 배열을 생성하라.(0은 포함하지 않는다) #card id:: 6960b85a-b8e7-4a8b-a5b6-e5087647bfc7
          • var arr = stride(from:1.0, to: 0.0, by: -0.1).map{$0}
            var arr = Array(stride(from:1.0, to: 0.0, by: -0.1))
            
        • 0부터 20까지 4의 간격으로 포함하는 배열을 생성하라(20은 포함된다) #card id:: 6960b921-ae3e-4a8a-9430-2d56ec243992
          • var arr = stride(from:0, through: 20, by: 4).map{$0}
            var arr = Array(stride(from:0, through: 20, by: 4))
            
  • ► 고차함수 모음

    • ◼︎ .map()

      • 정의 #card

        id:: 691edbcd-37ca-425c-85bb-f5ea0a45269d
        • 컨테이너(배열 등) 내부의 모든 요소에 대해 지정된 클로저(함수)를 실행하고, 그 결과를 모아 새로운 배열로 반환하는 고차함수.
        • 원본 배열을 수정하지 않는다.
      • 문법구조 #card

        id:: 691edc68-64c5-4d4a-a2c1-1f67dbf503e1
        • let result = numbers.map { number in
              return number * 2
          }
          // 기본적으로 클로저를 입력받아서 실행됨.
          // in 앞에는 컨테이너의 각 값을 의미하는 매개변수 명
          // in 뒤에는 실행할 함수를 작성함.
          
          let result = numbers.map { $0 * 2 }
          // 클로저 문법에 따라 입력 변수를 그냥 $0, $1 형태로 해서 바로 사용하는 것도 가능함
          
  • ► 클로저(Closure)

    • ◼︎ 정의 #card

      id:: 69203197-090a-42f4-9a92-16efb9516eca
      • swift에서 사용되는 익명함수 기능을 통칭하는 용어
      • 일급 객체로서 변수/상수에 저장도 가능하고 함수의 파라미터로 전달하거나 리턴값으로 사용 가능.
    • ◼︎ 문법

      • ● 기본문법 #card id:: 6920321b-21c3-4661-a415-debd1460f764
        • // 기본 형태
          {(매개변수) -> 반환타입 in 실행구문}
          
          // 변수 대입
          let sum_nums = {(a: Int, b: Int) -> Int in return a+b}
          
      • ● 문법최적화(sorted 함수를 기준으로 단계별로 최적화 되는 것을 설명) #card id:: 69203294-17a2-4c7e-a0af-e3811397d73b
        • // 0. 전체 문법
          let sorted0 = nums.sorted(by: {(a: Int, b: Int) -> Bool in 
              return a < b
          })
          
          // 1. 타입유추
          // 파라미터의 타입을 추정할 수 있다면 생략이 가능하다
          let sorted1 = nums.sorted(by: {(a, b) in 
              return a < b
          })
          
          // 2. 암시적 변환
          // 클로저 내부의 코드가 단 한줄이면 return 키워드를 생략 가능
          let sorted2 = nums.sorted(by: {(a, b) in 
              a < b
          })
          
          // 3. 단축 인자 이름
          // 매개변수도 생략하고 첫번째 인자는 $0, 두번째 인자는 $1 로 해서 사용가능
          let sorted3 = nums.sorted(by: { 
          	$0 < $1
          })
          
          // 4. 후행클로저
          // 함수의 매개변수 중 클로저가 1개이고 가장 마지막으로 들어가는 인자일 경우
          // 클로저 자체의 중괄호를 소괄호 밖으로 뺄 수 있음
          // 고차함수의 인자가 클로저 1개 뿐일 경우에는
          // 소괄호 자체도 생략해서 클로저만 붙이는것도 가능
          let sorted4_1 = nums.sorted(){$0 < $1}
          let sorted4_2 = nums.sorted{$0 < $1}
          
          // 참고사항
          // 연산자는 (<, >) 그 자체로 이미 클로저이기에 바로 넘길 수 있음
          let sorted5 = nums.sorted(by: <)