본문 바로가기
Programing/Swift & Xcode

swift 문법 정리 #1

by TEXTBOX 2022. 5. 10.
728x90
문자열 보간법 : 프로그램 시행 중 문자열 내에 변수 또는 상수의 값을 표현

사용법 \()
let value = 10
"현재 값은 \(value) 입니다."

 

콘솔로그 남기기

print 함수 : 단순 문자열 출력
print("test값은 10이다")
 =>
test값은 10이다

dump 함수 : 인스턴스의 자세한 설명(description 프로퍼티)까지 출력
dump("test값은 \(10+10)이다")
 => - "test값은 20이다"

 

변수와 상수 선언

// 상수 선언 키워드 let
let constant: String = "차수에 변경이 불가능한 상수 let"
// 변수 선언 키워드 var
var variable: String = "차후에 변경이 가능한 변수 var"

//상수 선언 후에 나중에 값 할당하기
// 나중에 할당하려고 하는 상수나 변수는 타입을 꼭 명시해주어야 한다.

let sum: Int
let inputA: Int = 100
let inputB: Int = 200

sum = inputA + inputB
sum = 1 // 그 이후에는 다시 값을 바꿀경우 오류 발생

 

기본 데이터 타입
 Bool : true, false 값만 가능, 0이나 1을 할당시에 오류

var vBool: Bool = true

 Int

var vInt: Int = -100

UInt : 부호가 없는 양의 정수

var vUInt: UInt = 100

Float

var vFloat: Float = 1.234

Double

var vDouble: Double = 1.234

Character : 문자 여러개가 입력될 시에 오류

var vCharacter: Character = "A"

String

var vString: String = "abcdef"
vString = vString + "ghijk"

 

Any - Swift의 모든 타입을 지칭하는 키워드

var vAny: Any = 100
vAny = "text type"
vAny = 123.123

AnyObject-  모든 클래스 타입을 지칭하는 프로토콜

class AClass {}
var anyClass: AnyObject = AClass()

anyClass = 111.22 //class가 아닌 변수값은 오류

nil - null값

var vAny2: Any = nil // 어떤 데이터 타입이 들어올 수 있지만 nil은 오류발생

 

컬렉션 타입
Array - 순서가 있는 리스트 컬렉션 : 선언 및 생성

var arrInt: Array<Int> = Array<Int>()
var arrDou: Array<Double> = [Double]()
var arrStr: [String] = [String]()
var arrChar: [Character] = []

arrInt.append(1)
arrInt.append(2) // [1, 2]

arrInt.contains(2) //true
arrInt.contains(3) //false

arrInt.remove(at: 0) // 1을 제거
arrInt.removeLast() // 2를 제거
arrInt.removeAll() // 전체제거

arrInt.count // 갯수

 

Dictionary -  키와 값의 쌍으로 이루어진 컬렉션

var dic: Dictionary<String, Any> = [String: Any]()
dic["Key1"] = "value test"
dic["KeyInt"] = 100

dic.removeValue(forKey: "Key1") //특정키 삭제
dic["Key1"] = nil // 키 삭제와 동일효과

let initDic: [String: String] = ["Key1":"value1", "key2":"value2"]
let strValue: String = initDic["key1"] //nil값이 있을 수 있으므로 오류발생

 

 Set - 순서가 없고, 멤버가 유일한 컬렉션

var setInt: Set<Int> = Set<Int>()
setInt.insert(11) // {11}
setInt.insert(22) // {11, 22}
setInt.insert(33) // {11, 22, 33}
setInt.insert(33) // {11, 22, 33} 중복값 존재 X

setInt.contains(22)  //true
setInt.remove(33) // {11, 22}
setInt.removeFirst() // {22}

setInt.count

let setA: Set<Int> = [1, 2, 3, 4, 5]
let setB: Set<Int> = [3, 4, 5, 6, 7]

let union: Set<Int> = setA.union(setB) // {3, 6, 7, 5, 2, 4, 1}
let sortedUnion: [Int] = union.sorted() // {1, 2, 3, 4, 5, 6, 7}
let intersection: Set<Int> = setA.intersection(setB) // {5, 3, 4}
let subtracting: Set<Int> = setA.subtracting(setB) // {2,1}

함수
MARK - 함수의 선언
함수선언의 기본형태

func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 ...) -> 반환타입 {
    /* 함수 구현부 */
    return 반환값
}

함수에 매개변수 기본값 설정 - 매개변수 타입 뒤 = 이후 기본값 설정

func sum(a: Int, b: Int = 3) -> Int {
    return a + b
}

반환값 없는 함수

func printsum(a: Int, b: Int) -> Void{
    print(a+b)
}

반환값이 없을때 Void 생략가능

func printsum2(a: Int, b: Int) {
    print(a+b)
}

전달인자 레이블

// 전달인자 레이블은 함수를 호출할 때 매개변수의 역활을 좀더 명확하게 하거나
// 함수 사용자의 입장에서 표현하고자 할 때 사용함

func helloprint(str1 text1: String, str2 text2: String) {
    print("str1 \(text1) - str2 \(text2)")
}

helloprint(str1: "test111", str2: "test2222")

가변 매개변수 사용시

func helloprint2(text1: String, text2: String...) {
    print("str1 \(text1) - str2 \(text2)")
}

helloprint2(text1: "test111", text2: "test2222", "test33", "test44")
helloprint2(text1: "가변인자는 안넘기기..")

swift의 함수는 일급객체이므로 변수, 상수 등에 저장가능하고 매개변수를 통해 전달 할 수 있다

var func1: (String, String) -> Void = helloprint(str1:str2:)
func1("test111", "test2222")

타입이 다른 함수는 할당 할 수 없다

func1 = helloprint2(text1:, text2:)

 

조건문
 If문 

var vInt = 110

if vInt < 100 {

    print("100 미만")

} else if vInt > 100 {

    print("100 초과")

} else {

    print("100")

}

 

 switch문 

switch vInt {

case 0:

    print("0")

case 1..<100:

    print("1~99")

case 100:

    print("100")

case 101...Int.max:

    print("over 100")

default:

    print("unknown")

}

 

반복문 

var integers = [1, 2, 3]
let people = ["aa": 10, "bb": 20, "cc": 30]

for문

for integer in integers {
    print(integer)
}

// Result : 1 2 3

for (name, value) in people {
    print("\(name): \(value)")
}

// Result : bb: 20, cc: 30, aa: 10

while문

while integers.count > 1 {
    integers.removeLast()
}

repeat 문

repeat {
    integers.removeLast()
} while integers.count > 0

            

 옵셔널 

// 값이 있을수도있고 없을수도 있음을 표현
// nil이 할당 될 수 있는지 없는지 표현

func optionalfunction(optionalparam: Int?) {
    //code
}

func notOptionalfunc(notoptionalparam: Int) {
    //code
}

optionalfunction(optionalparam: nil) //error 발생이 되지않음
notOptionalfunc(notoptionalparam: nil) //error 발생

열거형 옵셔널 사용 emum + general

enum Optional<Wrapped> : ExpressibleByNilLiteral {
    case none
    case some(Wrapped)
}

let optionalValue: Optional<Int> = nil //옵셔널로 지정하여 값 선언
let optionalValue: Int? = nil // ?로 옵셔널을 표현가능

옵셔널 표현

1. 느낌표(!)를 이용한 암시적 추출 옵셔널 

var optionaltype1: Int! = 100

// 기존변수처럼사용가능
// nil 할당가능
// nil값을 할당을 받은상태로 산식계산등 잘못된 접근시 런타임오류 발생

2. 물음표(?)를 이용한 옵셔널

var optionaltype2: Int? = 100

// nil 할당 가능
// 기존 변수처럼 사용불가 - 옵셔널과 일반 값은 다른 타입이므로 연산불가

 

옵셔널 추출
  • 옵셔널 바인딩
1. nil 체크 + 안전한 추출
2. 옵셔널 안에 값이 들어있는지 확인하고 값이 있으면 값을 꺼내옵니다.
3. if-let 방식 사용
  • 강체추출 : 옵셔널에 값이 들어있는지 아닌지 확인하지 않고 강제로 값을 꺼내는 방식, 만약 값이 없을경우(nil) 런타임 오류가 발생하기 때문에 추천되지 않습니다.

 

728x90

'Programing > Swift & Xcode' 카테고리의 다른 글

Swift 문법정리 #3  (0) 2022.09.04
swift 문법 정리 #2  (0) 2022.06.19

댓글