Swift Playground (스위프트 플레이그라운드) 기준이라 스위프트에서는 단축키 같은거는 다를지도 모르겠다...
단축키
Shift + return : 현재 행까지 실행
Command + Shift + return : 전체 실행
Command + Shift + Option + return : 코드리뷰 열기/닫기
Control + return : 실행 정지 - 정지는 단축키가 없으니 추가해준거다. Editor 하단에 보면 'Stop Playground'라고 있다. 시스템 - 키보드 - 단축키 - 앱 단축키에서 Xcode에 Stop Playground를 추가하고 원하는 단축키를 지정. Xcode Swift에서는 어떤지 모르겠지만 일단 Playground에서는 중복되는 키가 없어서 Control + return으로 했다. (아마 Option + return도 가능할 듯 하다.)
Command + '+' : 폰트 사이즈 ↑
Command + '-' : 폰트 사이즈 ↓
Command + Control + '0'(숫자 0) : 폰트 기본 사이즈로
자료형 및 기본 문법
Int : 정수
Flost, Doulbe : 실수
String, Character : 문자열, 문자
Bool : 참/거짓
% : 스위프트의 나머지 연산은 변수가 정수일 때만 가능하다! 실수로 들어왔다면 정수로 바꿔야 작동.
var : 변수
let : 상수
\(변수 또는 계산식) : "~~~ \( ) ~~~" 문자열 내에 이 형태가 있다면 문자가 아니라 컨트롤 하는 값이다.
var 변수명:자료형 = 값 형태로 쓴다. i.e. var wallet:String = "empty"
var 배열명:[자료형] = [값1,값2,값3...] 형태로 쓴다. i.e. var coin:[String] = ["다보탑","벼","이순신","학"]
var 딕셔너리명:[자료형:자료형] = [Key1:Value1, Key2:value2... ] 형태로 쓴다. (딕셔너리는 인덱스가 없다. 키로만 호출)
i.e. var birthday:[String:Int] = ["철수":860124, "영희":910830]
var 튜플명 = (값1,값2,값3...) 형태로 쓴다. i.e. var testTuple = (134,"서울",809,"경기",394,"인천"...)
튜플은 서로 다른 종류의 자료형을 하나로 묶을 수 있다!
튜플의 활용
var (변수1,변수2,변수3...) = (값1,값2,값3...) 형태로 쓴다. i.e. var (addr, tel, coin) = ("Seoul", "010-2233-3333", 12345)
튜플을 활용해 여러개의 변수를 한 번에 선언할 수 있다. 아래처럼 2줄로 나눠서 쓸 수도 있다.
var 튜플명 = (값1,값2,값3...)
var (변수1,변수2,변수3...) = 튜플명
var 튜플명 = (변수1:값1,변수2:값2,변수3:값3...) 형태로 쓴다. i.e. var namedTuple = (addr:"Seoul",tel:"010-2233-3333",coin:12345)
(인덱스는 물론 키로도 호출 가능)
위에와 완전히 다르다. 위에는 단지 튜플을 활용해 여러개의 변수를 한 번에 선언하는것이고 이거는 튜플을 딕셔너리처럼 Key:Value 형태로 네임드화 하는 것이다.
형변환
Int(123.456)
Double(123)
String(123)
배열 (참조 : Swift (스위프트) 배열)
var ABC:[Int] = [] : 빈 배열 생성 (빈 문자열 배열을 생성하려면 ABC:[String])를 사용
var ABC = Array(repeating: element, count: Int) : element를 Int만큼 반복한 배열 생성
var ABC = Array(repeatElement(element, count: Int)) : element를 Int만큼 반복한 배열 생성
ABC.append(300) : ABC 배열의 마지막에 값 300을 덧붙인다. (파이썬 리스트와 동일)
ABC.insert(7, at: 3) : ABC 배열에 값 7을 인덱스 3에 삽입한다. (파이썬과 기능은 동일하나 괄호 안의 표현법만 다르다.)
ABC.remove(at: 3) : ABC 배열의 인덱스 3의 값을 삭제한다. (파이썬은 .remove(120) 은 가장 앞에 나온 120을 삭제함. 완전히 다르다.)
ABC.remove(at: ABC.firstIndex(of: 3)) : firstIndex(of: )를 응용해 ABC 배열에서 가장 앞에 있는 3을 삭제한다. (파이썬의 .remove(3)과 동일)
ABC.removeAll() : ABC 배열의 모든 값을 삭제한다.
ABC.count : ABC 배열의 길이를 반환. (파이썬의 len(ABC)와 동일하다. 파이썬의 .count()는 값의 개수를 찾는 것으로 완전히 다르다.)
ABC.sort() : ABC 배열을 오름차순 정렬한다. -> inplace=true
ABC.sort(by:<) : ABC 배열을 오름차순 정렬한다. -> inplace=true
ABC.sort(by:>) : ABC 배열을 내림차순 정렬한다. -> inplace=true
ABC.sorted() : ABC 배열을 오름차순 정렬한다. -> inplace=false
ABC.sorted(by:<) : ABC 배열을 오름차순 정렬한다. -> inplace=false
ABC.sorted(by:>) : ABC 배열을 내림차순 정렬한다. -> inplace=false
ABC.reverse() : ABC 배열의 순서를 뒤집는다. -> inplace=true
ABC.reversed() : ABC 배열의 순서를 뒤집는다. -> inplace=false
ABC.firstIndex(of: 70) : ABC 배열에서 70의 인덱스를 반환. (파이썬의 .index(70) 과 같다.)
ABC.count : 배열, 딕셔너리의 길이를 확인. (튜플 X)
ABC[i] : 배열의 i 인덱스 호출.
ABC["Key1"] : 딕셔너리의 Key1을 호출하여 Value1 값을 반환. 짝퉁 딕셔너리 튜플과 비교!
ABC.i : 튜플의 i 인덱스 호출
ABC.i 또는 ABC.Key1 : 짝퉁 딕셔너리 튜플의 i 인덱스 호출 또는 Key1 변수 호출하여 Value1 값을 반환. 딕셔너리와 비교! (링크)
(A,B) = (B,A) : 변수 A, B를 스왑
swap(&A,&B) : 변수 A, B를 스왑
ABC.swapAt(2,4) : 배열의 인덱스 2와 4를 스왑
함수
StrideThrough : stride(from: 2, through: 22, by: 4) -> [2, 6, 10, 14, 18, 22] through까지 포함
StrideTo : stride(from: 2, to: 22, by: 4) -> [2, 6, 10, 14, 18] to 전까지 포함. (to는 포함 X)
T : 함수 도움말에 나오는 T는 Type이란 말로 자료형을 넣으라는거다.
pow(a, b) = a^b. a와 b는 반드시 실수형이어야한다. Int는 계산 불가능. pow(64,1/2)처럼 루트 계산은 불가능하다.
sqrt(a) = root(a). a는 반드시 실수형이어야한다. Int는 계산 불가능.
조건문 : if, if else if, switch
// if 조건문
if <#condition#> {
<#statements#>
} else {
<#statements#>
}
// if else if 조건문
if <#condition#> {
<#statements#>
} else if {
<#statements#>
} else {
<#statements#>
}
/ switch 조건문
switch <#value#> {
case <#pattern#>:
<#code#>
default:
<#code#>
}
var dice = 5
// if else if문으로 구현
if dice == 1 {
print("1 입니다.")
} else if dice == 2 {
print("2 입니다.")
} else if dice == 3 || dice == 4 || dice == 5 {
print("3,4,5 중 하나 입니다.")
}else {
fatalError("Unsupported")
}
// switch문으로 구현
switch dice {
case 1:
print("1 입니다.")
case 2:
print("2 입니다.")
case 3,4,5:
print("3,4,5 중 하나 입니다.")
default:
fatalError("Unsupported")
}
반복문 : for, while
// for 반복문
for <#item#> in <#items#> {
<#code#>
}
// while 반복문
while <#condition#> {
<#code#>
}
var i1 = 0
for i1 in 1...100{ // 아래 while문과 비교해보자.
print(i1, terminator:" ")
}
print("\n")
var i2 = 0
for i2 in 1..<100{ // 위에는 1...100이지만 미만을 넣을거면 .을 하나 줄인다 1..<100
print(i2, terminator:" ")
}
print("\n")
for _ in 1..<100{ // 변수 생략할 때 공란으로 두면 안 되고 _ 라도 넣어야 한다.
print(" *", terminator:"")
}
결과 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
위에는 for문, 아래는 while문을 사용해 동일한 로직을 만들었다
var i1 = 0
i1 += 1 // 범위가 정해진 for문과 달리 조건만 있는 while문에서는 시작 숫자를 맞춰주기 위해 반복문 시작 전에 i1의 값을 1로 올려야한다. 아니면 처음부터 i1 = 1로 선언한다.
while i1 <= 100 {
print(i1, terminator:" ")
i1 += 1
}
print("\n")
var i2 = 0
i2 += 1
while i2 < 100 {
print(i2, terminator:" ")
i2 += 1
}
print("\n")
var i3 = 1 // while문은 위해 선언.
while i3 < 100 {
print("*", terminator:" ")
i3 += 1
}
반복문의 범위에는 음수(마이너스)도 들어갈 수 있다. 또한 순서를 뒤집어서 돌릴 수도 있다..
for문에서는 .reversed()를 사용하면 쉽게 뒤집힌다. 하지만 while문은 시작과 종료를 뒤집어주면 된다.
// -3 ~ +5를 반복한다.
for i in (-3...5){
print(i, terminator:" ")
}
print("\n")
// .reversed()에 의해 뒤집혀서 +5 ~ -3을 반복한다.
for i in (-3...5).reversed(){
print(i, terminator:" ")
}
print("\n\n")
시작할 변수를 잘 선언한 후 while문 안에 종료 조건을 넣는다.
var i = -3
while i <= 5 {
print(i, terminator:" ")
i += 1
}
print("\n")
i = 5
while i >= -3 {
print(i, terminator:" ")
i -= 1 // 감소시키는 로직
}
제어 이동(control transfer) 명령
continue : 루프 맨 앞으로 제어를 넘김.
break : 루프에서 빠져나옴.
return : 함수의 값을 반환
fallthrough : switch 문에서만 사용. 현재 case에서 다음 case로 실행을 이어나감.(조건 검사 없이 실행).
기타
Optional
결과에 Optional -> Xcode가 경고를 띄우는 것 조건부로 실행해본다는 의미로 'Optional'이 붙어서 나온다. 조건 뒤에 !를 붙이면 강제로 실행할 수 있다. 단, 코드가 잘못 되었을 경우 앱이 멈춘다. 따라서
'개발자 > Swift' 카테고리의 다른 글
Swift (스위프트) 배열, 딕셔너리, 튜플 (0) | 2020.04.01 |
---|---|
Swift (스위프트) 연습 첫 번째 (0) | 2020.03.31 |
Swift (스위프트) 별 찍기와 반복문에 대한 고찰 (0) | 2020.03.26 |
Swift (스위프트) 구구단 만들기 (0) | 2020.03.25 |
Swift (스위프트) 별찍기 (0) | 2020.03.25 |