swift basic operators-controlflow
DESCRIPTION
아꿈사 swift Basic Operator, String and Character, Collection Types, Control FlowTRANSCRIPT
Basic Operators
Swift
용어
단항 연산자• -a, !b, i++
이항 연산자• 2 + 3
삼항 연산자• (a ? b : c)
할당 연산자let b = 10 // 상수var a = 5 // 변수a = b// a 는 10
let (x, y) = (1, 2)// 튜플이용 x 는 1, y 는 2
if x = y {}// 대입연산자는 값을 반환하지 않으므로 오류
산술 연산자1 + 25 – 32 * 310.0 / 2.5// 오버플로우를 허용하지 않음// 오버플로우 연산자 이용 ( 예 a &+ b) >> Advanced Operators 참고
“hello, “ + “world” // “hello, world”// 덧셈 연산자는 문자열 지원
let dog:Character = “🐶”let cow:Character = “🐮”let dowCow = dow + cow // dowCow 는 “🐶🐮”
나머지 연산자
9 % 4// 1
-9 % 4// -1
8 % 2.5// 0.5
증감 연산자
var a = 0let b = ++a // b 는 0let c = a++ // c 는 1// a 는 2
단항 마이너스 연산자
let three = 3// three 는 3
let minusThree = -three // minusThree 는 -3
let plusThree = -minusThree// plusThree 는 3
단항 플러스 연산자
let minusSix = -6let alsoMinusSix = +minusSix// alsoMinusSix 값은 -6, 변함없다
복합 할당 연산자
var a = 1a += 2// a 는 3, a = a + 2 의 축약
let b = a += 2// 요런건 안된다
비교 연산자a == ba != ba > ba < ba >= ba <= bobj1 === obj2// 동일 객체면 true, class 타입일 때 사용obj1 !== obj2// 동일 객체 아니면 false
삼항 조건 연산자
(question ? answer1 : answer2)참이면 answer1, 거짓이면 answer2
let contentHeight = 40let hasHeader = truelet rowHeight = contentHeight + (hasHeader ? 50 : 20)// rowHeight 는 90 (40 + 50)
범위 연산자 ( 폐쇄 )a…b
for index in 1…5 {println(“\(index) time 5 is \(index * 5)”)
}// index 는 1, 2, 3, 4, 5
Control Flow 에서 다시 설명
범위 연산자 ( 반폐쇄 )a..b
let names = [“Anna”, “Alex”, “Brian”, “Jack”]let count = name.count// count 는 4
for i in 0..count {println(“Person \(i + 1) is called \
(names[i])”)}// i 는 0, 1, 2, 3
논리 연산자 (NOT)let allowedEntry = falseif !allowedEntry {
println(“ACCESS DENIED”)}// ACCESS DENIED 출력됨
논리 연산자 (AND)let enteredDoorCode = truelet passedRetinaScan = falseif enteredDoorCode && passedRetinaScan {
println(“Welcome!”)} else {
println(“ACCESS DENIED”)}// ACCESS DENIED 출력
논리 연산자 (OR)let hasDoorKey = falselet knowOverridePassword = trueif hasDoorkey || knowOverridePassword {
println(“Welcome!”)} else {
println(“ACCESS DENIED”)}// Welcome! 출력
복합 논리 연산자let enteredDoorCode = truelet passedRetinaScan = falselet hasDoorKey = falselet knowOverridePassword = true
// ture && false || false || trueif enteredDoorCode && passedRetinaScan || hasDoorKey || knowOverridePassword {
println("Welcome!")} else {
println("ACCESS DENIED") }// Welcome! 출력
괄호 명시
if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowOverridePassword {
println("Welcome!")} else {
println("ACCESS DENIED")}// Welcome! 출력
Strings and Characters
Swift
문자열 리터럴
let someString = “Some string literal value”let wiseWords = “\”Imagination is more important than knowledge\” – Einstein”let dollarSign = “\x24” // 1 바이트 유니코드let balckHeart = “\u2665” // 2 바이트 유니코드let sparklingHeart = “\U0001F496” // 4 바이트 유니코드
빈 문자의 초기화
var emptyString = “”var anotherEmptyString = String()// 두 문자열 모두 비어있으며 서로 똑같다if emptySring.isEmpty {
println(“ 여기엔 아무것도 보이지 않습니다 .”)}// prints 여기엔 아무것도 보이지 않습니다 .
문자열 가변성
var variableString = “Horse”variableString += “ and carriage”// variableString 은 “ Horse and carriage”
let constantString = “Highlander”constantString += “ and another Highlander”// 컴파일 에러 – 상수 문자열은 변경될 수 없습니다 .
문자열 값 타입
Strings are value types
let a = “A string”let b = a// a 의 “ A string” 을 b 에 복사
class 는 Reference type
문자와 작업하기
for character in “Dog!🐶” {println(character)
}// D// o// g// !// 🐶let wonSign:Character = “₩”
문자 세기
let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪" println("unusualMenagerie has \(countElements(unusualMenagerie)) characters")
// unusualMenagerie has 40 characters
문자열 및 문자 합치기let string1 = "hello“let string2 = "there“let character1: Character = "!“let character2: Character = "?“let stringPlusCharacter = string1 + character1 // "hello!“let stringPlusString = string1 + string2 // "hello there“let characterPlusString = character1 + string1 // "!hello“let characterPlusCharacter = character1 + character2 // equals "!?“
var instruction = "look over“instruction += sting2 // "look over there“var welcome = "good mornig“welcome += character1 // "good morning!"
문자열 삽입
let multiplier = 3let message = “\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)”// 3 times 2.5 is 7.5 출력
괄호안에 “ (Double Quote), \(Back Slash), Carriage Return, New Line 등을 포함할 수 없다
문자열 비교
let a = “abcdefg”let b = “abcdefghi”a == b // falsea.hasPrefix(“abc”) // trueb.hasSuffix(“efg”) // false
대문자 소문자 문자열
let normal = “Could you help me, please?”let shouty = normal.uppercaseString// COULD YOU HELP ME, PLEASE?
let whispered = normal.lowercaseString// could you help me, please?
유니코드
let dogString = “Dog! 🐶”dogString.utf8dogString.utf16dogString.unicodeScalars
Collection Types
Swift
배열 (Arrays)var shoppingList = [“Eggs”, “Mink”]println(“The list contains \(shoppingList.count) items”)// The list contains 2 items
if shoppingList.isEmpty {println(“empty”)
} else {println(“not empty”)
}// not empty
배열 요소 추가
shoppingList.append(“Flour”)shoppingList += “Baking Powder”shoppingList += [“Chocolate Spread”, “Cheese”, “Butter”]
배열 조작
var firstItem = shoppingList[0]shoppingList[0] = “Six eggs”shoppingList[4...6] = [“Bananas”, “Apples”]// “Six eggs”, “Mink”, “Flour”, “Baking Powder”, “Chocolate Spread”, “Cheese”, “Butter”// “Six eggs”, “Mink”, “Flour”, “Baking Powder”, “Bananas”, “Apples”
shoppingList.insert(“Maple Syrup”, atIndex: 0)let mapleSyrup = shoppingList.removeAtIndex(0)let apples = shoppingList.removeLast()
배열 반복문 사용
for item in shoppingList {println(item)
}for (index, value) in enumerate(shoppingList) {
println(“Item \(index + 1): \(value)”)}
배열 생성 , 초기화var someInts = Int[]()someInts.append(3) // 1 valuesomeInts = [] // empty, Int[] 타입 유지var threeDoubles = Double[](count:3, repeatedValue:0.0)// [0.0, 0.0, 0.0]var anotherOnes = Array(count:3, repeatedValue:2.5)// 기본값에서 타입 추정 , [2.5, 2.5, 2.5]var sixDoubles = threeDoubles + anotherOnes// [0.0, 0.0, 0.0, 2.5, 2.5 2.5]
Dictionaryvar airports: Dictionary<String,String> = [“TYO”, “Tokyo”, “DUB”, “Dublin”]var airports = [“TYO”: “Tokyo”, “DUB”: “Dublin”]
Dictionary 조작
airports.countairports[“LHR”] = “London”airports[“LHR”] = “London Heathrow”airports.updateValue(“Dublin International”, forKey: “DUB”)if let airportName = airports[“DUB”] {
println(“airport name : \(airportName)”)} else {
println(“not found in dictionary”)} // airports 에 DUB 이 없으면 nil 리턴
Dictionary 요소 삭제
airports.removeValueForKey(“DUB”)airports[“DUB”] = nil
Dictionary 반복문 사용for (airportCode, airportName) in airports {
println(“\(airportCode): \(airportName)”)}
for airportCode in airports.keys {println(“airport code: \(airportCode)”)
}
for airportName in airports.values {println(“airport name: \(airportName)”)
}
빈 Dictionary 생성
var namesOfIntegers = Dictionary<Int, String>()namesOfIntegers[16] = “sixteen”namesOfIntegers = [:] // empty
Control Flow
Swift
For 순환문
for-infor index in 1...5 {
println(“\(index) times 5 is \(index * 5)”)}
for-condition-incrementfor var index = 0; index < 3; ++index {
println(“index is \(index)”)}
_ underscoreloop 내에 값이 사용되지 않는다면 _let base = 3let power = 10var answer = 1for _ in 1...power {
answer *= base}
배열 반복
let names = [“Anna”, “Alex”, “Brain”, “Jack”]for name in names {
println(“Hello, \(name)!”)}
Dictionary 반복
let numberOfLegs = [“spider”:8, “ant”:6, “cat”:4]for (animalName, legCount) in numbeOfLegs {
println(“\(animalName): \(legCount) legs”)}
문자열 반복
for character in “Hello” {println(character)
}// H// e// l// l// o
For- 조건부 - 증가부
for var index = 0; index < 3; ++index {println(“index is \(index)”)
}
var index : Int // for loop 밖에서 사용하기 위해for index = 0; index < 3; ++index {}println(“executed \(index) times”)// execute 3 times
whilevar a = 0var b = 10while a < b {
a++}println(a)// 10
Do-Whilevar count = 0do {
count++} while count < 10println(count)// 10
조건문 ifvar temperatureInFahrenheit = 90
if temperatureInFahrenheit <= 32 {println(“It’s very cold. consider wearing a scarf.”)
} else if temperatureInFahrenheit >= 86 {println(“It’s really warm. Don’t forget to wear
sunscreen”)} else {
println(“It’s not that cold. Wear a t-shirt.”)}// It’s really warm. Don’t forget to wear sunscreen
switchlet someCharacter:Character = “e”switch someCharacter {case “1”, “2”, “3”:case “a”, “e”, “i”, “o”, “u”:
println(“\(someCharacter) is a vowel”)case “b”, “c”, “d”, “f”, “g”, “h”, “j”, “k”, “l”, “m”
, “n”, “p”, “q”, “r”, “s”, “t”, “v”, “w”, “x”, “y”, “z”:println(“\(someCharacter) is a consonant”)
default: // 반드시 포함println(“\(someCharacter) is not a vowel or a consonent”)
}
switch 범위로 매치let count = 3_000_000_000_000let countedThings = “stars in the Mily Way”var naturalCount : Stringswitch count {case 0:
naturalCount = “no”case 1...3:
naturalCount = “a few”case 4...9:
naturalCount = “serveral”case 10...99:
naturalCount = “tens of”default: // 반드시 포함
naturalCount = “millions and millions of”}
switch 튜플let somePoint = (1, 1)switch somePoint {case (0, 0):
println(“(0, 0) 은 원점에 있습니다” )case (_, 0):
println(“\(somePoint.0), 0) 은 x 축 상에 있습니다” )case (0, _):
println(“(0, \(somePoint.1)) 은 y 축 상에 있습니다” )case (-2...2, -2...2):
println(“(\(somePoint.0), \(somePoint.1)) 은 상자 안에 있습니다” )default:
println(“(\(somePoint.0), \(somePoint.1)) 은 상자 밖에 있습니다” )}
Value Bindingslet anotherPoint = (2, 0)switch anotherPoint {case (let x, 0):
println(“x 축 상에 있으며 x 의 값은 \(x) 값입니다” )case (0, let y):
println(“y 축 상에 있으며 y 의 값은 \(y) 입니다” )}// x 축 상에 있으며 x 의 값은 2 입니다
wherelet yetAnotherPoint = (1, -1)switch yetAnotherPoint {case let(x, y) where x == y:
println(“(\(x), \(y)) 는 x==y 인 곳에 있습니다” )case let(x, y) where x == -y:
println(“(\(x), \(y)) 는 x==-y 인 곳에 있습니다” )case let(x, y):
println(“(\(x), \(y)) 는 기타 구역에 있습니다” )}// (1, -1) 은 x==-y 인 곳에 있습니다 .
continuelet puzzleInput = “great minds think alike”var puzzleOutut = “”for character in puzzleInput {
switch character {case “a”, “e”, “i”, “o”, “u”, “ “:continuedefault:puzzleOutput += character}
}// puzzleOutput = “grtmndsthnklk”
breakvar count = 0while true {
count++if count == 10 {
break}
}
breaklet numberSymbol: Character = “3”var possibleIntegerValue: Int?switch numberSymbol {case “1”:
possibleIntegerValue = 1case “2”:
possibleIntegerValue = 2default:
break // 아무것도 안할 때 break 를 쓰자}// possibleIntegerValue = nil
fallthroughlet integerToDescribe = 5var description = “ 수 \(integerToDescribe) 는 “switch integerToDescribe {case 2, 3, 5, 7, 11, 13, 17, 19:
description += “ 소수이며 , 또한”fallthrough
default:description += “ 정수입니다 .”
}// description = “ 수 5 는 소수이며 , 또한 정수입니다 .”
Labeled StatementsgameLoop: while square != finalSquare {
if ++diceRoll == 7 { diceRoll = 1 }switch square + diceRoll {case finalSquare:break gameLoop // println(“Game over!”) 로 점프case let newSquare where newSquare > finalSquare:continue gameLoop // while 으로 점프default:square += diceRollsquare += board[sqaure]}
}println(“Game over!”)