본문 바로가기

IT/Swift

[swift] swift5

[swift] swift5

swift5 변경된 부분에 대하여 알아보겠습니다.

 

Release note url : https://developer.apple.com/documentation/xcode_release_notes/xcode_10_2_release_notes/swift_5_release_notes_for_xcode_10_2

1. Enhancing String Literals Delimiters to Support Raw Text

  • 여는 따옴표 앞에 #이 있는 String literal은 하나의 literal로 처리한다.
  • swift5이전 방식과 혼용가능 

swift 5swift 5 이전

print(#"<a href="\#(url)" title="Apple Developer">"#) print("<a href=\"\(url)\" title=\"Apple Developer\">"

2. Result type 

 

 

 

 

swift 5swift 5 이전

enum APIError: Error {...
func fetchModel<T: Decodable>(completion: @escaping (Result<T,APIError>) -> Void) { ... func fetchModel<T: Decodable>(completion: @escaping (T?, APIError?) -> Void) { ...

3. Dynamically callable

  • 인스턴스를 마치 함수처럼 접근 가능하게함

swift 5swift 5 이전

@dynamicCallable struct NalzzaGenerator {

  func dynamicallyCall(withArguments args: [Int]) -> Date? {

    var dc = DateComponents()

    dc.year = args[0]

    dc.month = args[1]

    dc.day = args[2]

    return Calendar.current.date(from: dc)

  }

}

let nalzzaGenerator = NalzzaGenerator()

nalzzaGenerator(2019, 4, 1)

struct NalzzaGenerator {

  func generate(year: Int, month: Int, day: Int) -> Date? {

    var dc = DateComponents()

    dc.year = year

    dc.month = month

    dc.day = day return Calendar.current.date(from: dc)

  }

}

let n = NalzzaGenerator()

n.generate(year: 2019, month: 4, day: 1)

 

4. Enum variadic arguments disable

  • 열거형에 가변인수 불가능

swift 5swift 5 이전

enum X {

  case foo(bar: [Int])

} 


 

func baz() -> X {

  return .foo(bar: [0, 1, 2, 3])

}

 

 

enum X {

  case foo(bar: Int...)

} 


 

func baz() -> X {

  return .foo(bar: 0, 1, 2, 3)

}



 

 

5. Flatten nested optionals resulting from 'try?' 

  • 중첩된 Optional 방지 기능이 있다

swift 5swift 5 이전

let result = try? database?.countOfRows(matching: predicate)

Int? Int??



6. _ExpressibleByStringInterpolation protocol remove


#if compiler(<5) extension MyType: _ExpressibleByStringInterpolation { /*...*/ } #else extension MyType: ExpressibleByStringInterpolation { /*...*/ } #endif

 

 

#swift 강의

#swift 기초 강의

#swift 기초 문법

#아이폰 프로그래밍

#아이폰 개발

#ios programming

#ios develop

#iphone

#xcode

#swift 변경

#swift5 새로운 부분

#swift5 Release note

'IT > Swift' 카테고리의 다른 글

[swift] Map, Filter, Reduce, Monad, FlatMap  (0) 2019.09.16
[swift] Architecture mvc/mvp/mvvm/viper/vip 비교  (0) 2019.08.21
[swift] guard  (0) 2019.08.21
[swift] Protocol  (0) 2019.08.21
[swift] try? try! try  (0) 2019.08.21