THE SWIFT PROGRAMMING LANGUAGE - SWIFT 5 번역
이 글은 THE SWIFT PROGRAMMING LANGUAGE를 번역한 글로, 의미가 쉽게 전달되도록 하기위해 많은 부분을 의역하였음을 미리 알려 드립니다.
WELCOME TO SWIFT
스위프트로의 여행 (1)
전통적으로 새로운 언어를 배울때 처음 하는 것은 "Hello, world!"를 화면에 출력하는 것입니다. 스위프트에서 아래와 같이 단 한줄의 코드로 "Hello, world!"를 출력할 수 있습니다.
1 2 | print("Hello, world!") // Prints "Hello, world!" | cs |
1 2 3 | var myVariable = 42 myVariable = 50 let myConstant = 42 | cs |
1 2 3 | let implicitInteger = 70 let implicitDouble = 70.0 let explicitDouble: Double = 70 |
1 2 3 | let label = "The width is " let width = 94 let widthLabel = label + String(width) | cs |
1 2 3 4 | let apples = 3 let oranges = 5 let appleSummary = "I have \(apples) apples." let fruitSummary = "I have \(apples + oranges) pieces of fruit." | cs |
1 2 3 4 5 6 7 8 | let quotation = """ Even though there's whitespace to the left, the actual lines aren't indented. Except for this line. Double quotes (") can appear without being escaped. I still have \(apples + oranges) pieces of fruit. """ | cs |
대괄호([])를 사용하여 배열과 딕셔너리를 만듭니다. 그리고 대괄호 안에 인덱스나 키를 적어서 각각의 요소에 접근합니다. 마지막 요소의 뒤에 쉼표를 붙일 수도 있습니다.
1 2 3 4 5 6 7 8 | var shoppingList = ["catfish", "water", "tulips"] shoppingList[1] = "bottle of water" var occupations = [ "Malcolm": "Captain", "Kaylee": "Mechanic", ] occupations["Jayne"] = "Public Relations" |
1 2 | shoppingList.append("blue paint") print(shoppingList) |
1 2 | let emptyArray = [String]() let emptyDictionary = [String: Float]() | cs |
타입이 추정될 수 있다면, 여러분은 빈 배열을 [] 으로, 빈 딕셔너리를 [:] 으로 작성할 수 있습니다. - 예를 들어, 새로운 값을 변수에 할당 할때 또는 함수에 인수를 전달 할 때 타입이 추정될 수 있을 것입니다.
1 2 | shoppingList = [] occupations = [:] | cs |
흐름 제어 (Control Flow)
1 2 3 4 5 6 7 8 9 10 11 | let individualScores = [75, 43, 103, 87, 12] var teamScore = 0 for score in individualScores { if score > 50 { teamScore += 3 } else { teamScore += 1 } } print(teamScore) // Prints "11" | cs |
1 2 3 4 5 6 7 8 9 | var optionalString: String? = "Hello" print(optionalString == nil) // Prints "false" var optionalName: String? = "John Appleseed" var greeting = "Hello!" if let name = optionalName { greeting = "Hello, \(name)" } | cs |
optionalName 값을 nil 로 바꾸어 봅시다. 어떤 인사말이 나오나요? optional 이 nil 일 경우 다른 인사말을 설정하는 else 절을 추가해 봅시다.
만일 옵셔널 값이 nil 이면, 조건은 false 이고, 중괄호 안의 코드는 무시될 것입니다. 반면에, 옵셔널 값이 언래핑 되고 let 상수에 할당되면, 코드 블럭 안에서 언래핑 된 값을 사용할 수 있습니다.
1 2 3 | let nickName: String? = nil let fullName: String = "John Appleseed" let informalGreeting = "Hi \(nickName ?? fullName)" | cs |
switch 는 어떤 종류의 데이터든 지원하며, 또한 매우 다양한 비교 연산도 지원합니다. - 즉, 단순히 정수 값을 비교하는데 한정되지 않는 다는 뜻입니다.
1 2 3 4 5 6 7 8 9 10 11 12 | let vegetable = "red pepper" switch vegetable { case "celery": print("Add some raisins and make ants on a log.") case "cucumber", "watercress": print("That would make a good tea sandwich.") case let x where x.hasSuffix("pepper"): print("Is it a spicy \(x)?") default: print("Everything tastes good in soup.") } // Prints "Is it a spicy red pepper?" | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | let interestingNumbers = [ "Prime": [2, 3, 5, 7, 11, 13], "Fibonacci": [1, 1, 2, 3, 5, 8], "Square": [1, 4, 9, 16, 25], ] var largest = 0 for (kind, numbers) in interestingNumbers { for number in numbers { if number > largest { largest = number } } } print(largest) // Prints "25" | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 | var n = 2 while n < 100 { n *= 2 } print(n) // Prints "128" var m = 2 repeat { m *= 2 } while m < 100 print(m) // Prints "128" | cs |
인덱스 범위를 만들기 위해 ..< 을 사용하여 인덱스를 유지할 수 있습니다.
1 2 3 4 5 6 | var total = 0 for i in 0..<4 { total += i } print(total) // Prints "6" |
인덱스 마지막 값을 포함하지 않으려면 ..< 을 사용하고, 마지막 값까지 포함하려면 ... 을 사용합니다.
함수와 클로저 (Functions and Closures)
1 2 3 4 | func greet(person: String, day: String) -> String { return "Hello \(person), today is \(day)." } greet(person: "Bob", day: "Tuesday") | cs |
1 2 3 4 | func greet(_ person: String, on day: String) -> String { return "Hello \(person), today is \(day)." } greet("John", on: "Wednesday") | cs |
복합적인 값을 만들기 위해 튜플을 사용합니다. - 예를 들어, 함수로부터 여러개의 값을 한번에 리턴하기 위해서 튜플을 사용할 수 있습니다. 튜플의 요소들은 이름으로 접근 할 수도 있고, 숫자로 접근 할 수도 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) { var min = scores[0] var max = scores[0] var sum = 0 for score in scores { if score > max { max = score } else if score < min { min = score } sum += score } return (min, max, sum) } let statistics = calculateStatistics(scores: [5, 3, 100, 3, 9]) print(statistics.sum) // Prints "120" print(statistics.2) // Prints "120" | cs |
함수안에 함수를 만들 수도 있습니다 (중첩 함수 - Nested function). 중첩 함수는 바깥쪽 함수에 선언된 변수들에 접근할 수 있습니다. 여러분은 중첩 함수를 길거나 복잡한 함수내의 코드들을 조직하고 정리하는데 사용할 수 있습니다.
1 2 3 4 5 6 7 8 9 | func returnFifteen() -> Int { var y = 10 func add() { y += 5 } add() return y } returnFifteen() | cs |
함수는 first-class 형입니다. 이 말은 함수는 다른 함수를 그 함수의 값으로써 반환할 수 있다는 뜻입니다.
1 2 3 4 5 6 7 8 | func makeIncrementer() -> ((Int) -> Int) { func addOne(number: Int) -> Int { return 1 + number } return addOne } var increment = makeIncrementer() increment(7) | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 | func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool { for item in list { if condition(item) { return true } } return false } func lessThanTen(number: Int) -> Bool { return number < 10 } var numbers = [20, 19, 7, 12] hasAnyMatches(list: numbers, condition: lessThanTen) | cs |
함수는 실제로 클로저의 특별한 유형입니다 (코드블록은 나중에 불릴 수도 있습니다.). 클로저 안의 코드는 클로저가 생성된 범위 안에서 사용 할 수 있는 변수와 함수 같은 것들에 접근 할 수 있습니다. 심지어 클로저가 실행될 때 다른 범위에 있다하더라도 그렇습니다 (여러분은 중첩 함수와 함께 이미 이런 예를 보았습니다.). 그리고 중괄호({})로 둘러싸면, 이름 없는 클로저를 작성할 수도 있습니다. 클로저 본문에서 인수들과 반환형 뒤에 in 을 붙여 내용과 구분하세요.
1 2 3 4 | numbers.map({ (number: Int) -> Int in let result = 3 * number return result }) | cs |
1 2 3 | let mappedNumbers = numbers.map({ number in 3 * number }) print(mappedNumbers) // Prints "[60, 57, 21, 36]" | cs |
1 2 3 | let sortedNumbers = numbers.sorted { $0 > $1 } print(sortedNumbers) // Prints "[20, 19, 12, 7]" | cs |
(다음 글에 계속)
원글 : https://docs.swift.org/swift-book/GuidedTour/GuidedTour.html
번역 : 날개코더
원글 저작권 2019 Apple Inc. CC BY 4.0 원글출처 https://swift.org/documentation/#the-swift-programming-language
번역글 2차 저작권 (C) 2019 WingsNote.com
'프로그래밍 언어 > Swift' 카테고리의 다른 글
THE SWIFT PROGRAMMING LANGUAGE SWIFT 5 번역 : WELCOME TO SWIFT - 버전 호환성 (0) | 2019.03.10 |
---|---|
THE SWIFT PROGRAMMING LANGUAGE SWIFT 5 번역 : WELCOME TO SWIFT - 스위프트에 대하여 (0) | 2019.03.10 |
Swift 기초 #02 - Hello, world! (1) | 2014.12.19 |
Swift 기초 #01 - 스위프트 언어? (0) | 2014.12.18 |