[Swift] 기본 문법-1

max9106·2019년 12월 17일
0

[Swfit] 기본 문법

목록 보기
1/1

**edwith의 Swift 프로그래밍 입문 강의(by 야곰)를 보고 정리 한 것 입니다.
https://www.edwith.org/boostcamp_ios/joinLectures/9881

Tool

  • mac OS / ubuntu
  • xcode

이름 짓기

  • function/method/variable/constant
    Lower Camel Case(ex. helloWorld)
  • type(class/struct/enum/extension etc)
    Upper Camel Case(ex. Car)

콘솔에 출력

  • print: 단순 문자열
  • dump: 인스턴스의 대한 설명까지 출력

문자열 보간법##

  • 프로그램 실행 중 문자열 안에 변수나 상수의 실질적인 값을 표현해서 넣기 위해 사용
  • \() 사이에 값을 넣어주면 자동으로 치환되어 표현됨
//ex.
	let age:Int=10;
    "저는 \(age)살입니다."
	 

상수&변수

  • swift는 변하지 않는 객체를 중요하게 여김 -> 상수를 많이 사용
  • swift는 띄워쓰기에 민감
  • 상수 선언: let
    let 이름: 타입 = 값
    ex)let age: Int = 10
    but, 타입이 명확하다면 생략 가능
    ex) let age = 10
    값을 나중에 할당하려고 할 때는, 타입 명시 필수(값이 할당되지 않은 상태에서는 사용불가)
    ex) let sum: Int
    선언 후, 단 한번만 값 할당 가능
  • 변수 선언: var
    var 이름: 타입 = 값
    ex)var age: Int = 10
    but, 타입이 명확하다면 생략 가능
    ex) var age = 10
    값을 나중에 할당하려고 할 때는, 타입 명시 필수(값이 할당되지 않은 상태에서는 사용불가)
    ex) var sum: Int
    선언 후, 제한 없이 할당 가능

기본 데이터 타입

  • swift는 데이터 타입에 대하여 엄격
  • Bool
    true / false 값만 들어갈 수 있음
    true와 false 대신 1과 0 사용할 수 없다.
    ex. var someBool: Bool = true
  • Int
    양수, 음수, 0을 포함한 64비트 정수형 타입
    실수 넣을 수 없음
    ex. var someInt: Int = -100
  • UInt(unsigned int)
    양의 정수 타입
    음수 불가
    Int 타입 값을 넣을 수도 없음
    ex. var someUInt: UInt = 100
  • Float
    32비트 부동 소수형 타입
    정수를 넣어도 무리 없이 받아들일 수 있다.
    ex. var someFloat: Float = 3.14
  • Double
    64비트 부동 소수형 타입
    정수를 넣어도 무리 없이 받아들일 수 있다.
    float 타입 값은 넣어줄 수 없음
    ex. var someDouble: Double = 3.14
  • Character
    한 글자를 표현하기 위한 타입
    유니코드 사용
    큰 따옴표로 값을 묶어줌
    ex. var someCharacter: Character = "h"
  • String
    여러 글자의 문자열
    연산을 이용해 문자열 합쳐줄 수도 있음
    character 타입을 넣어 줄 수 없음
    ex.
var someString: String = "hello "
someString = someString + "world"
  • Any
    기본 데이터 타입은 아니지만, 데이터 타입의 위치에서 역할 수행
    swift의 모든 타입을 지칭하는 키워드(nil값은 넣어줄 수 없다)
    but, Any타입에 Double값이 들어가 있다 하더라도, Any타입을 Double 타입 변수에 할당할 수는 없다
    ex.
var someAny: Any = 100   
someAny = "hello world"  //가능
someAny = 3.14  //가능

let someDouble: Double = someAny // 불가능
  • AnyObject
    기본 데이터 타입은 아니지만, 데이터 타입의 위치에서 역할 수행
    모든 클래스 타입을 지칭하는 프로토콜(nil은 넣을 수 없다)
    클래스의 인스턴스만 할당 가능
    ex.
class SomeClass {}
var someAnyObject: AnyObject = SomeClass()
  • nil
    '없음'을 나타내는 키워드
    다른 언어의 null과 비슷함

컬렉션 타입

  • 여러 값을 묶어, 하나의 변수로 표현
  • Array
    순서가 있는(index가 있음) 리스트 컬렉션
    다른 타입의 값을 Array에 넣을 수 없음
    ex.
var integers: Array<Int> = Array<Int>() // 빈 Array 생성
// var integers: Array<Int> = [Int]() // Array<Int>() == [Int]()
// var integers: Array<Int> = [] // 대괄호만 써주어도 빈 Array를 만들 수 있다 

// let immutableArray = [1, 2, 3] // let으로 Array 선언 시, 멤버들 변경 불가능 

integers.append(1) // Array의 맨 뒤에 요소 추가
integers.append(300)

integers.contains(300) // Array안에 특정 요소가 존재하는 지 확인. 있으면 true 없으면 false

integers.remove(at: 0) // 인덱스를 기준으로 값을 Array에서 삭제 
integers.removeLase() // Array의 제일 마지막 요소를 삭제
integers.removeAll() // Array안의 멤버들을 모두 삭제 

integers.count // Array안의 멤버들의 총 개수
  • Dictionary
    Key와 Value로 이루어진 컬렉션
    Hashmap과 비슷
    ex.
var anyDictionary: Dictionary<String, Any> = [String: Any]() // Key(이 예제에서는 String 값)와 Value(이 예제에서는 Any) 타입 지정. 빈 Dictionary 생성
// let emptyDictionary: [String: Any] = [:] // 빈 Dictionary 생성
// let initializedDictionary: [String: Any] = ["name":"junseo", "age": 24]
// let으로 선언 시, Dictionary의 값을 변경할 수 없다.

//let someValue: String = initializedDictionary["name"] // error발생. Dictionary안에 "name"이라는 key가 있다는 보장이 없기 때문에. 불확실성.

anyDictionary["someKey"] = "value" // Dictionary에 someKey라는 Key와 value라는 value 세트를 넣어줌

anyDictionary["someKey"] = "another value" // someKey라는 key가 가진 value가 "value"에서 "another value"로 바뀜

anyDictionary.removeValue(forKey: "someKey") // Dictionary안의 someKey라는 key깂이 있을 경우, someKey와 해당되는 value값 세트를 삭제
anyDictionary["someKey"] = nil // someKey에 해당되는 값을 지워줄 때 사용. removeValue와 유사한 표현
  • Set
    집합 연산과 비슷
    순서가 없고, 컬렉션 안의 멤버들이 각각 유일한 컬렉션 타입
    ex.
var integerSet: Set<Int> = Set<Int>() // Int 타입의 빈 Set 생성

integerSet.insert(1) // Set에 요소 추가 
integerSet.insert(1) // Set는 중복되는 값을 넣을 수 없기 때문에 1을 한 번 더 넣어줘도, 하나의 값만 들어가 있다. 

integerSet.contains(1) // Set안에 1이라는 값이 있는지 확인. 값이 있으면 true

integerSet.remove(1) // Set안의 1이라는 값을 삭제
integerSet.removeFirst() // Set안의 첫 번째 값을 삭제

integerSet.count // Set안의 멤버 개수

//set은 {} array는 []

let SetA: Set<Int> = [1,2,3,4,5] // {5, 2, 3, 1, 4}
let SetB: Set<Int> = [3,4,5,6,7] // {5, 6, 7, 3, 4}

// 합집합
let union: Set<Int> = setA.union(setB)
print(union) // {2, 4, 5, 6, 7, 3, 1}

// 만들어 준 합집합 오름차순 정렬하여 같은 타입의 배열로 변환
let sortedUnion: [Int] = union.sorted()
print(sortedUnion) // [1, 2, 3, 4, 5, 6, 7]

// 교집합
let intersection: Set<Int> = setA.intersection(setB)
print(intersection) // {5, 3, 4}

// 차집합
let subtracting: Set<Int> = setA.subtracting(setB)
print(subtracting) // {2, 1}
profile
이전 블로그: https://blog.naver.com/max9106

0개의 댓글