Swift Basic 01

jayb·2021년 3월 9일
0

Swift Basic

목록 보기
1/8
post-thumbnail

Swift Basic

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

1. 명명법

  • Upper Camel Case: type(class, struct, enum, extension) 등
  • Lower Camel Case: 그 외(function method, variable, constant)

2. 콘솔로그 남기기

  • print 함수: 단순 문자열 출력
  • dump 함수: 자세한 설명까지 출력

3. 문자열 보간법(String Interpolation)

​ - \(변수 또는 상수)를 문자열에 삽입하여 바로 출력 가능

상수와 변수

1. 상수와 변수 선언

  • let: 차후 변하지 않는 값(상수)를 선언할 때 사용
  • var: 차후 변하는 값(변수)를 선언할 때 사용

기본 데이터 타입

1. Bool

  • true / false값을 가지는 값

2. Int, UInt

  • Int; 부호를 가지는(Signed) 정수 타입으로 기본적으로 64비트 정수형
  • Uint: 부호를 갖지 않는(Unsigned) 정수 타입으로 기본적으로 64비트 양의 정수형

3. Float, Double

  • Float: 32비트 부동소수형 실수타입
  • Double: 64비트 부동소수형 실수타입

소수점 표현 방식

  • 컴퓨터가 실수를 표현할 때에는 2진수를 사용한다. 예를 들어, 0.75의 경우 0.5+0.25 이므로 이진법으로 0.11로 표현 가능하다. 하지만 263.3이나 0.3 같은 경우는 2진수로 표현 할 수 없고, 이런 경우 컴퓨터에서 표현할 수 있는 방법에는 두가지가 있다. 부동 소수점을 표현하는 방식도 정하는 방식에 따라 다를 수 있지만 일반적으로 IEEE에서 표준으로 제안한 방식을 따른다.

  • 부동소수점(floating point):

    0.1234는 여러가지 방식으로 표현 가능하다.

    0.001234 * 10^2

    0.01234 * 10^1

    0.1234 * 10^0

    1.234 * 10^(-1)

    이 때, 10진법이므로 고정되어있는 10 부분을 기수, 10의 거듭제곱을 나타내는 수를 지수, 앞에 소수부를 가수라고 부른다. 위의 표현 방식처럼, 소수점의 위치가 움직이는 것을 ''떠다닌다(floating)'이라고 표현하며 부동 소수점이라고 한다.

  • 고정소수점(fixed point):

    부동소수점과 다르게 위의 예시에서 0.1234라고 표현, 즉 10진법이지만 10의 거듭제곱으로 표현하는 것이 아니라 0.1234라고 표현하면 소수점이 움직일 방법이 없고 이런 경우를 고정소수점 표현이라고 한다.

4. Character, String

​ - 문자 타입과 문자열 타입으로 모두 유니코드와 큰 따옴표("")를 사용한다.

Any, AnyObject, nil

  1. Any

    • Any 타입으로 선언된 변수에는 어떤 타입의 데이터든 넣을 수 있다.

    • 하지만 예를 들어, Any 타입으로 선언된 변수에 Int값을 넣는다고 Any 타입이 Int로 변환되는 것은 아니므로 그 변수 자체를 다시 Int로 선언된 변수에 할당하는 것은 불가능하다. 즉, let intNumber: Any = 10 을 let target: Int = intNumber로 사용할 순 없다.

      let intNumber: Any = 10
      let target: Int = intNumber (compile error 발생)
  2. AnyObject

    • Any의 경우 모든 타입으로 선언된 변수를 담을 수 있고, AnyObject는 어떤 클래스 타입이든 담을 수 있다.
  3. nil

    • 없음을 의미하는 것으로 다른 언어의 null과 같은 역할이다.
    • Swift에서는 nil을 변수에 직접 할당할 수 없다.

컬렉션 타입(Array, Dictionary, Set)

  1. Array

    • index를 활용하여 데이터에 접근할 수 있는 리스트 형태의 컬렉션 타입

    • Array<타입>이나 [타입]으로 선언

      var integers: Array<Int> = Array<Int>()
      var integers: Array<Int> = [Int]()
      var integers: Array<Int> = []
      var integers: [Int] = Array<Int>()
      var integers: [Int] = [Int]()
      var integers: [Int] = []
      var integers = [Int]()
    • 여러가지 리터럴 문법 활용 가능

      리터럴(Literal): 저장되는 데이터 그 자체를 의미한다. let PI: float = 3.14 의 경우 3.14가 리터럴이 된다.

  2. Dictionary

    • key : value 의 구조로 이루어진 컬렉션 타입

    • swift의 dictionary 구조는 정의된 순서가 없다.

      var anyDictionary: Dictionary<String, Any> = [String: Any]() // 타입을 명시할 경우 () 필요
      var anyDictionary: Dictionary <String, Any> = Dictionary<String, Any>()
      var anyDictionary: Dictionary <String, Any> = [:]
      var anyDictionary: [String: Any] = Dictionary<String, Any>()
      var anyDictionary: [String: Any] = [String: Any]()
      var anyDictionary: [String: Any] = [:]
      var anyDictionary = [String: Any]()
  3. Set

    • 중복이 없고 순서가 없는 컬렉션

    • Set은 Array나 Dictionary와 다르게 [], [:] 처럼 축약형으로 정의가 불가능하다.

      var integerSet: Set<Int> = Set<Int>()

함수 기본

func 함수이름(매개변수: 매개변수 타입 ...) -> returnType {
  /* 함수 구현부 */
  return returnValue // 반환값이 존재할 시
}

함수 고급

  1. parameter에 default값 넣기

    func 함수이름(매개변수1이름: 매개변수1타입, 매개변수2이름: 매개변수2타입 = 매개변수 기본값 ...) -> 반환타입 {
        /* 함수 구현부 */
        return 반환값
    }
    func introduce(greeting: String, me: String = "Jay") {
        print("\(gretting) I'm \(me)")
    }
  2. parameter에 label하기

    func 함수이름(전달인자 레이블 매개변수1이름: 매개변수1타입, 전달인자 레이블 매개변수2이름: 매개변수2타입 ...) -> 반환타입 {
        /* 함수 구현부 */
        return
    }
  3. 입력될 매개변수의 크기가 확정되지 않을 때

    func 함수이름(매개변수1이름: 매개변수1타입, 전달인자 레이블 매개변수2이름: 매개변수2타입...) -> 반환타입 {
        /* 함수 구현부 */
        return
    }
    func greetToFriends(me: String, friends: String...) -> String {
        return "Hello \(friends)! I'm \(me)!" // friends는 array로 입력된다.
    }
  4. 데이터 타입으로서의 함수

    • 일급객체(First-class Object): 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체

    • Swift에서 함수는 일급객체이므로 parameter로서 활용될 수 있다.

Reference:

profile
iOS Developer

0개의 댓글