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) : elementInt만큼 반복한 배열 생성 

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'이 붙어서 나온다. 조건 뒤에 !를 붙이면 강제로 실행할 수 있다. 단, 코드가 잘못 되었을 경우 앱이 멈춘다. 따라서 

+ Recent posts