Hi yoahn 개발블로그

[Swift] #1 Swift 기초 문법 1 본문

프로그래밍 언어/swift

[Swift] #1 Swift 기초 문법 1

hi._.0seon 2021. 1. 19. 20:22
반응형

1) Swift 소개

  • 스위프트는 문법 표현의 다양성이 높은 언어

2) 명명법 / 콘솔로그 / 문자열 보간법

  • Lower Camel Case : 함수, 메소드, 변수, 상수
  • Upper Camel Case : 타입(클래스, 구조체, enum, extension)

3) 콘솔로그

  • print -> 주어진 문자열을 출력
  • dump -> 클래스의 인스턴스를 콘솔에 찍거나, 딕셔너리를 더 자세히 찍

4) 문자열 보간법

  • 문자열 내에 변수 또는 상수의 값을 표현하기 위해 사용

let age: Int = 10

“안녕하세요! 저는 \\(age)살입니다”

4) 상수, 변수 선언

- 상수

  • let 이름: 타입 = 값
  • 차후에 값 변경 불가
  • 상수 선언 후 할당 한번만 가능

- 변수

  • var 이름: 타입 = 값

  • 차후에 값 변경 가능

  • 변수 / 상수는 초기화 한 이후 사용 가능

  • 값의 타입이 명확하다면 타입 생략 가능 (선언과 초기화 동시)

  • 선언 뒤 나중에 값을 할당하려는 상수나 변수는 반드시 타입 명시

5) 기본 데이터 타입

- Bool

var someBool: Bool = true someBool = 0 or 1 => Error

Swift에서는 Bool 타입에 Int 타입 넣는 것을 허용하지 않음

- Int : 64비트 정수형

var someInt: Int = 200

Int 가 아닌 다른 타입을 넣으면 컴파일 오류

- UInt : 64비트 양의 정수형

var someUInt: UInt = 100

  • someUInt = -1
  • someUint = someInt => 컴파일 오류

- Float : 실수 타입, 32비트 부동소수형

var someFloat: Float = 3.14 someFloat = 3

 

- Double : 실수 타입, 64비트 부동소수형

var someDouble: Double = 3.14 someDouble = 3

  • someDouble = someFloat => 컴파일 오류

- Character, String

  • Character : 문자 타입. 유니코드 사용. 큰따옴표("") 사용.

var someChar: Character = "#"

-> 문자열 여러개가 들어가면 컴파일 에러

  • String : 문자열 타입. 유니코드 사용. 큰따옴표("") 사용.

var someString: String = "하하하 :)" someString = someString + "호호호"

  • someString = somechar -> 컴파일 에러

다른 데이터 타입과의 자료 교환은 암시적으로 절대 불가능

let floatingPoint = 12.34 -> type(of: floatingPoint) 로 데이터 타입을 알 수 있다.

6) Any, AnyObject, nil

  • Any Swift 의 모든 타입을 지칭하는 키워드
var someAny: Any = 100
someAny = "어떤 타입도 수용 가능합니다"
someAny = 123.12

// Any 타입에 Double 자료를 넣어두었더라도 Any 타입 변수를 Double 타입 변수에 할당할 수 없다
// 명시적으로 타입을 변환해야 한다
let someDouble: Double = someAny
// Any 타입이기 때문에 어떤 타입이든 들어올 수 있지만, **빈 값 someAny = nil

// compile error someAnyObject = nil
// compile error
  • AnyObject 모든 클래스 타입을 지칭하는 프로토콜 클래스의 인스턴스만 수용 가능하기 때문에 클래스의 인스턴스가 아니면 할당할 수 없다.

  • nil ‘없음'을 의미하는 키워드

7) 컬렉션 타입

여러 값들을 묶어서 하나의 변수로 표현할 수 있게 만들어 줌

  • Array: 순서가 있는 리스트 컬렉션
  • Dictionary : [‘키’ : ‘값’] 쌍으로 이루어진 컬렉션
  • Set : 순서가 없고, 멤버가 유일한 컬렉션
/* Array */
var integers: Array<int> = Array<Int>()
// = [int]()
// = []
// : [Int] = Array<Int>()
// : [Int] = [Int]()
// : [int] = []
// var integers = [int]()

// method
integers.append(1) // 맨 뒤에 요소 추가

integers.contains(10) // 이 요소를 가지고 있는지 체크

integers.remove(at: [index])
integers.removeLast()
integers.removeAll()

integers.count

// Array 삭제 후 Array에 인덱스 접근 불가
/* Dictionary */
var anyDictionary: Dictionary<String, Any> = [String: Any]()
anyDictionary["someKey"] = "value"
anyDictionary["anotherKey"] = 100

// 키에 해당하는 값을 변경
anyDictionary["someKey"] = "dictionary"

// 키에 해당하는 값 제거 - 2가지 방법
anyDictionary.removeValue(forKey: "anotherKey")
anyDictionary["someKey"] = nil

// 빈 딕셔너리 표현
let emptyDictionary: [String: String] = [:]
let initializedDictionary: [String: String] = ["name": "yagom", "gender": "male"]

// emptyDictionary["key"] = "value" -> compile 에러, 값 변경 불가
// let someValue: String = initializedDictionary["name"]
=> 에러, 딕셔너리 키에 해당하는 값이 있을수도, 없을수도 있기 때문(불확실성 때문에)
/* Set */
var integerSet: Set<Int> = Set<Int>()

integerSet.insert(1)
integerSet.insert(10)
//integerSet.insert(1) => 더이상 추가되지 않음. 이미 있기 때문에

integerSet.contains(1)

integerSet.remove(100)
integerSet.removeFirst()

integerSet.count

// method
union, sorted, intersection, subtracting
반응형
Comments