본문 바로가기

ETC

Swift 문법 간단 정리 #1

  • Optional
    • 값이 존재할 수도 있는 상황에서 optional를 사용한다.
    • optional의 의미
      • 값이 있고 그 값이 x와 같다.
      • 값이 없다.
    • optional가 값이 있다는 것을 확신하면 마지막에 느낌표를 붙여서 값에 접근할 수 있다.
      • !: 값이 존재함을 확신할 수 있다는 의미
      • forced unwrapping
    • optional binding
      • if let abc = possible.toInt()
      • possible.toInt가 리턴한 optional int값이 값을 가지고 있다면 새로운 상수 abc의 값을 그 값으로 한다.
      • forced unwrapping이 불필요 = ! 쓸 필요 없음
    • Implicitly Unwrapped Optionals
      • 프로그램 구조적으로 항상 값을 가질 때 수시로 !로 unwrapping해줄 필요 없이 값 지정 후 선언해주는 것
      • Q. 그럼 일반 상수와의 차이는 뭘까?
        • nil을 지정할 수 있는지 여부
      • String! 사용
      • 클래스 초기화 과정에서 사용
        • 클래스의 initialize 과정에서 property를 선언할 때는 값을 지정할 수 없으니까 (외부에서 받으므로..)
        • @see Unowned References and Implicitly Unwrapped Optional Properties
      • 사용하면서 forced unwrapping을 해줄 필요가 없다.
  • Assertion
    • 조건이 false가 될 수 있지만 코드 실행을 위해서는 반드시 true여야 하는 곳에서 사용
      • An integer subscript index is passed to a custom subscript implementation, but the subscript index value could be too low or too high.
      • A value is passed to a function, but an invalid value means that the function cannot fulfill its task.
      • An optional value is currently nil, but a non-nil value is essential for subsequent code to execute successfully.
      • 다음에서 발췌: Apple Inc. ‘The Swift Programming Language.’ iBooks. https://itun.es/kr/jEUH0.l
  • Operator
    • 할당 연산자 = 는 그 값을 반환하지 않음. 따라서 if a = 5 {} 는 유효하지 않음
    • 산술 연산자는 값이 오버플로우 되는 것을 허락하지 않음
    • 오버플로우 시에 사용할 수 있는 overflow operator가 존재
      • &+, &-, &*
    • %는 나머지를 의미
    • i++ 보다는 ++i를 추천. i를 변경하고 결과를 반환한다는 일반적으로 예상되는 동작을 수행하기 때문
    • a…b : b 포함
    • a..b : b 제외
  • String
    • value type: 함수나 메소드에 전달될 때 복사됨
    • count() : 글자수 세기
    • extended grapheme cluster로 인해 e위에 `가 있는 글자거나 한글이 초,중,종성의 각각의 코드로 이루어져 있어도 한 글자로 센다. (ㄱ,ㅏ,ㄴ 코드를 합친 것을 한 글자로. 물론 '간'에 대한 코드도 존재)
      • 이런 이유로 긴 문자열에서 count를 실행하면 모든 글자를 돌게 된다.
      • 마찬가지 이유로 NSString.length의 값과 count의 결과가 달라질 수 있다.
    • String은 integer를 바로 index로 사용할 수 없다.
      • String.startIndex, String.endIndex
        • 빈 경우 두 값은 같다.
        • endIndex는 마지막 문자의 index가 아니라 그 다음 index를 나타냄
      • advance(start: n:): 시작 지점부터 n번째의 index
    • 함수들
      • indicies(_:): range 생성
      • insert(_:atIndex:): index에 글자 삽입
      • splice(_:atIndex:): 특정 index에 문자열 삽입
      • removeAtIndex(_:): 특정 index의 글자 제거
      • removeRange(_:): 특정 범위의 문자열 제거
    • 비교
      • extended grapheme cluster로 구성된 글자든 한 코드로 된 글자든 표현하는 모습이 같으면 글자를 구성하는 코드가 달라도 같은 글자(문자열)이다. (canonical equivalent)
      • 비교시에는 locale에 따라 달라지지 않는다. (not locale-sensitive)
  • Collection
    • Array
      • Array<Type>, Type[]: 후자를 추천
      • count property로 배열에 포함된 값의 갯수를 확인
      • 함수들
        • isEmpty로 count가 0 여부 확인
        • append: 배열 마지막에 추가
        • += [ ]: 배열 마지막에 추가
        • insert(atIndex:): 특정 index에 값 추가
        • removeAtIndex(_:): 특정 index의 값 제거
        • removeLast()
        • for-in
        • enumerate
    • Set
      • Set<Type>
      • count property로 갯수 확인
      • 함수들
        • insert(_:)
        • remove(_:)
        • removeAll()
        • contains(_:)
        • for-in
        • 순서가 없으므로 특정한 순서에 따라 탐색하려면 sorted 사용
      • set 함수들
        • union(_:): 합집합
        • subtract(_:): 공통된거 빼기
        • intersect(_:): 교집합
        • exclusiveOr(_:): 두 set중 공통만 제외
        • ==: 동일한지
        • isSubsetOf(_:)
        • isSupersetOf(_:)
        • isStrictSubsetOf(_:), isStrictSupersetOf(_:) : superset이거나 subset인데 같지는 않은
        • isDisjointWith(_:): 공통 값 있는지
      • set에 저장되는 타입은 hashable 해야 함
    • Dictionaries
      • Dictionary<Key, Value>
      • [Key: Value]
        • Key는 hashable 해야 함
      • count property로 갯수 확인
      • 함수들
        • updateValue(_:forKey:): 옛날 값 반환 (optional)
        • removeValueForKey(_:)
        • for-in
        • 순서를 지정해서 탐색하려면 sorted 사용
  • control flow
    • for-in
      • for index in 1…5
        • index는 상수, 루프 돌 때마다 초반에 자동으로 값이 지정, let 불필요
    • switch
      • fallthrough
      • 여러 case에 매치할 경우 첫 번째 매치만 실행됨
      • case에 let, var를 사용하여 임시 변수로 만들 수 있음
      • where: case let (x, y) where x == y :
        • case내에서 또 조건을 세분화할 수 있음




반응형