23.01.08 학습일기
19. ControlFlow - for in
let names = ["kim", "lee", "min"]
let numbers = [1,5,3,35,3,65]
for name in names { // in names => 3번 반복
print(name) // "kim", "lee", "min"가 출력
}
for number in numbers { // in numbers => 6번 반복
print(number) // 1,5,3,35,3,65가 출력
}
let myRange1 = (0...5)
let myRande2 = (0..<6)
for number in myRange1 {
print(number) // 0부터 5까지 출력
}
인덱스 값까지 가져오고 싶다!
=> for (index, name) in names.enumerated(){
print(name, index)
} // index도 같이 출력됨
하나 씩 늘어나는 값 말고 5분 간격으로 뛰어 넘고 싶다!
=> let minute = 60
for minute in 0..<minutes {
if minute % 5 == 0 {
print(minute)
}
} // 60번 반복, 0부터 59까지 5분 간격으로 출력됨
위의 방식과 같은 방식
// 0..<minutes
for minute in stride(from: 0, to: minute, by: 5) { // from: 시작, to: 끝(포함x), by: 간격
print(minute)
} // 12번 반복, 이게 더 효율적. 0부터 59까지 5분 간격으로 출력
// 0...minutes
for minute in stride(from: 0, through: minute, by: 5) { // from: 시작, to: 끝(포함o), by: 간격
print(minute)
}
20. ControlFlow - while
// while은 반복 끝이 정해지지 않을 때 사용
// 주사위 (1~6)
// 주사위 홀수 -1
// 주사위 짝수 +2
// 목표 10까지 도달
var dice = 0 // 랜덤하게 나오는 주사위 번호
var myPosition = 0
while myPosition < 10 {
dice = Int.random(in 1...6)
if dice % 2 ==0 {
myPosition += 2
}else if myPosition > 0 {
myPosition -= 1
}
print("dice", dice, " position", myPosition)
}
print("end")
21. ControlFlow - switch
var number = 14
switch number {
case 3:
print("삼")
case 10...100:
print("십~백")
case 5, 7:
print("오, 칠")
default:
print("기타 숫자")
}
var someString = "e"
switch someString {
case "a":
print("삼")
case "c"..."f":
print("씨~에프")
case "g", "z":
print("쥐, 지")
default:
break // 빠져 나감
//print("기타 문자")
}
// switch case let : 이름을 지정하여 해당되는 값을 받아와 그 값으로 무언가를 하고 싶을 때 사용
let media = ("abc음악", 180)
switch media {
case let (title, length):
print("제목", title)
print("길이", length)
} // 제목 abc음악
길이 180으로 출력
==> 만일 하나의 값만 쓰고 싶다면?
let media = ("abc음악", 180)
switch media {
case let (title, _):
print("제목", title)
} // 제목 abc음악만 출력
22. Function_1
// 파라미터에 하나의 값
func presentMyScore(score: Int) {
print(score.description + "점") // String 형으로 변환. 변환을 해야 숫자가 화면에 찍힘
}
presentMyScore(score: 50)
-----------------------------------------------
// 파라미터에 두 개의 값
func presentScore(myScore: Int, yourScore: Int) {
print(myScore.description + " vs " + yourScore.description)
}
func presentScore(myScore: 80, yourScore: 100)
-----------------------------------------------
// function return
func plus(numver1: Int, number2: Int) -> Int {
return number1 + number2
}
let sumResult = plus(numver1: 50, number2: 30)
print(sumResult)
-----------------------------------------------
// 파라미터가 없는 경우
func printHello() {
print("Hello")
}
printHello() + "안녕"
-----------------------------------------------
// multiple return values
func scoreList() -> [Int] {
return [50, 30, 60]
}
scoreList()
func scoreList2() -> (eng: Int, music: Int) {
return (50, 80)
}
scoreList2().eng
scoreList2().music
-----------------------------------------------
// argument lables, parameter name - 다른 이름을 사용하고 싶을 때
func sumNumber1(num number1: Int, num number2: Int) {
number1 + number2 // 이 때는 뒤에 이름 씀
}
sumNumber1(num: 80, num: 80) // 이 때는 앞에 이름 씀
// 딱히 이름을 쓰지 않아도 될 때
func sumNumber1(_ number1: Int, _ number2: Int) {
number1 + number2 // 이 때는 뒤에 이름 씀
}
sumNumber1(50, 100)
-----------------------------------------------
// In-Out parameters
// Input
var myScore = 60
func plusFive() {
myScore += 5
}
myScore // 60
plusFive() // 이것만 봐서는 무엇을 +5 한다는 것인지 모름
myScore // 65
==> 함수의 용도를 직관적으로 파악하고 싶을 때!
// In-Out parameters
// inout
func plusNewFive(score: inout Int) {
score += 5
}
plusNewFive(score: &myScore) // 70
myScore // 70
----------------------------------------------------------------------------------
22. Function_2
// Function Types
var someString: String = ""
func sayHello() {
print("hello")
}
sayHello // () -> ()
// () -> void와 같음
func plus(a: Int, b: Int -> Int) {
return a+b
}
func minus(a: Int, b: Int -> Int) {
return a-b
}
let inputValue1 = 4
let inputValue2 = 5
func selectSymbolButton(buttonStyle: String) { // 함수가 무슨 기능 하는지 이름 정확하게 설정하기!!!
if buttonStyle == "+" {
plus(a: inputValue1, b: inputValue2)
} else if buttonStyle == "-" {
minus(a: inputValue1, b: inputValue2)
}
}
// 위의 경우는 실행까지 완료하는 경우. 실행하지 않고 기능을 담기만 하는 방법은?
// Optional 사용!
var calc : ((Int, Int) -> Int)?
func selectSymbolButton2(buttonStyle: String) {
if buttonStyle == "+" {
calc = plus // calc에 plus기능을 담기만 함. 실행x
} else if buttonStyle == "-" {
calc = minus // calc에 minus기능을 담기만 함. 실행x
}
}
func showResult() {
calc?(inputValue1, inputValue2) // ? 꼭 붙여야 함!!
} // "="를 눌렀을 경우와 같이 미리 담아둔 함수 기능을 여기서 실행!!!
댓글을 작성해보세요.