본문 바로가기
FE 공부/Swift

변수와 자료형

by 꼬질꼬질두부 2023. 3. 11.

2주차 Swift 문법 스터디


변수와 자료형

변수는 var 상수는 let

변수는 수정이 가능하며, 상수는 수정이 불가능하다.

var 변수이름 : Int = 1// 변수 선언 let myConstant:Int = 2// 상수 선언

기본 자료형

Swift의 기본 내장 자료형은 아래와 같다.

  • 정수형 : Int(음수 양수 가능), UInt(음수 불가)
  • 실수형 : Float(소숫점 6자리까지), Double(소숫점 15자리까지 정확성)
  • 참 거짓: Boolean _ true false
  • 문자 : Character
  • 문자열 : String

이들의 사용법은 기본적으로 위의 변수/상수 선언시 처럼 선언한다.

swift에서는 서로 다른 자료형 저장 불가

원하면 double(a) + b or a + Int(b) 형태로 계산


산술연산자, 논리연산자

산술 연산자

    • / * % …

논리 연산자

  1. 논리 부정 NOT ( !a )
  2. 논리 곱 AND ( a && b)
  3. 논리 합 OR ( a || b )

이외의 연산자

1) 단항 연산자

-a, !b, c!와 같이 대상 앞뒤에 바로 붙여서 사용하는 연산자

2) 이항 연산자

2 + 3 과 같이 두 대상 사이에 위치하는 연산자

3) 삼항 연산자

a ? b : c 형태로 참과 거짓에 대한 조건을 나타내는 연산자

할당 연산자

할당 연산자는 값을 초기화하거나 변경할 때 사용합니다.

아래와 같이 상수, 변수 모두 사용 가능합니다.

let b = 10
var a = 5

a = b // a 값은 10

let (x, y) = (1, 2) // x 는 1, y 값은 2 가 됩니다.

print("x : \\(x), y : \\(y)") // x : 1, y : 2

if x = y {
   //  x = y 는 값을 반환하지 않기 때문에 이 문법은 올바르지 않습니다.
}

비교 연산자

Swift에서는 비교를 위한 비교 연산자로서 아래와 같은 연산자를 지원합니다.

  1. 같다 (a == b)
  2. 같지않다 (a != b)
  3. 크다 (a > b)
  4. 작다 (a < b)
  5. 크거나 같다 (a >= b)
  6. 작거나 같다 (a <= b)

범위 연산자

Swift에서 지원하는 특별한 연산자로서 특정 범위에 대해서 지정할 수 있는 범위 연산자입니다.

// 닫힌 범위 연산자(Closed Range Operator)
// (a..b)의 형태로 범위의 시작과 끝이 있는 연산자 입니다. for-in loop에 자주 사용됩니다.

for index in 1...5 {
    print("\\(index) times 5 is \\(index * 5)”)
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25

// 반 닫힌 범위 연산자(Half-Open Range Operator)
// (a..<b)의 형태로 a부터 b보다 작을 때까지의 범위를 갖습니다. 즉, a부터 b-1까지 값을 갖습니다.

let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
    print("Person \\(i + 1) is called \\(names[i])")
}
// Person 1 is called Anna
// Person 2 is called Alex
// Person 3 is called Brian
// Person 4 is called Jack
// 단방향 범위(One-Side Ranges)
// [a..] [..a]의 형태로 범위의 시작 혹은 끝만 지정해 사용하는 범위 연산자 입니다.

let names = ["Anna", "Alex", "Brian", "Jack"]

for name in names[2...] {
    print(name)
}
// Brian
// Jack

for name in names[...2] {
    print(name)
}
// Anna
// Alex
// Brian

for name in names[..<2] {
    print(name)
}
// Anna
// Alex

// 단방향 범위 연산자는 subscript뿐만 아니라 아래와 같이 특정 값을 포함하는지 여부를 확인할 때도 사용 가능합니다.
let range = ...5

print(range.contains(7))   // false
print(range.contains(4))   // true
print(range.contains(-1))  // true

삼항 조건 연산자

삼항 조건 연산자는 question ? answer1 : answer2의 구조를 갖습니다.

question 조건이 참인경우 answer1이 거짓인 경우 answer2가 실행됩니다.


if, switch, guard

  • if

if<bool 조건식>{

//...

} else if { …

} else { …

}

  • guard
  • 후속 코드가 실행되기 전 조건을 만족하는지 확인하는 용도로 쓰인다. 특정 조건을 만족하지 않고 후속코드를 실행하지 못하도록 오류발생을 예방하는 코드로 사용된다.

guard <조건식 또는 표현식> else{

<조건식 또는 표현식 결과가 false일 때의  코드>

}

<aside> 🔥 if문 과의 차이점

else구문이 반드시 필요하다.

참일때의 실행코드블럭이 없다.

</aside>

<aside> 🔥 장점

코드의 중첩을 막아준다.

→ guard구문을 많이 사용해도 코드의 depth가 깊어지지 않는다.

</aside>

import Foundation
funcdivide(number:Int){
guard number != 0else{
    	print("0으로 나눌 수 없습니다.")
return
    }
let result = 100/number
    print("\\(result)")
}
divide(number: 0)
  • switch

switch <비교대상>{

case<비교패턴1>:

<수행코드1>

case<비교패턴2>:

<수행코드2>

default:

<비교패턴들과 일치하지 않을 때 수행 코드>

}

let sampleChar :Character = "a"

switch sampleChar{
case "A":
    		print("글자는 A입니다.")
case "a":
    		print("글자는 a입니다.")
default:
    		print("일치하는 글자가 없습니다.")
}

swift의 switch문은 모든 조건을 만족할 수 있는 case를 만들지 않으면 반드시 default블럭을 작성해주어야 합니다.

var value = (5,4)
switch value{
caselet(x, 3):
	print("x값이 \\(x)이고 y값이 3인 튜플")
caselet(3, y):
	print("x값이 3이고 y값이 \\(y)인 튜플")
caselet(x, y):
	print("x값이 \\(x)이고 y값이 \\(y)인 튜플")
}

위의 예제의 경우 모든 조건을 만족하는 switch문을 작성했기 때문에 default블럭을 생략해도 오류가 나지 않습니다. 하지만 만족하지 않는 구문의 경우 오류가 발생합니다.

var value = (3, -3)

switch value{
caselet (x,y)where x==y:
    	print("\\(x)와 \\(y)는 x==y 선상에 있음")
caselet (x,y)where x==-y:
    	print("\\(x)와 \\(y)는 x==-y 선상에 있음")
caselet (x, y):
	print("\\(x) \\(y)는 일반좌표상에 있음")
 }

for Loop, while Loop

<aside> 🔥 for loop_일정 횟수가 정해져 있을 때

for number in 1...5 {
   // body of loop
}
... -> 1~5 까지
..< -> 1~4 까지

</aside>

<aside> 🔥 while loop_일정 조건이 정해져 있을 때

while (condition){
  // body of loop
}

</aside>


break, continue, label

  • break
  • 반복을 중단한다.
  • continue
  • 현재 실행중인 반복을 중지하고, 다음 반복을 실행한다.
  • labelbreak LabeledName
  • 원하는 문장을 제어하고싶을 때 label처리를 해 제어한다

'FE 공부 > Swift' 카테고리의 다른 글

Swift - TableView _ Edit Mode  (0) 2022.11.29
Swift - TableView _ Managing Selection  (0) 2022.11.29
Swift - TableView Section  (0) 2022.11.22
Swift - Alert Controller  (0) 2022.11.22
Swift _ StackView  (0) 2022.11.15

댓글