꿀똥벌레
꿀똥벌레 개발 블로그
꿀똥벌레
전체 방문자
오늘
어제
  • 분류 전체보기 (90)
    • JAVA (17)
    • SPRING (14)
    • Elasticsearch (4)
    • GRADLE (2)
    • HTML, CSS (0)
    • JAVASCRIPT (0)
    • GIT (1)
    • Vue.js (1)
    • server (1)
    • Python (0)
    • IT리뷰 (0)
    • 인프라 (6)
    • IOS (21)
    • 디자인패턴 (20)
    • Kafka (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • maxConnPerRoute
  • java
  • 엘라스틱서치
  • elasticsearch
  • persistence connection
  • mappings
  • spring
  • SWIFT
  • persistent connection
  • Index Template
  • KEEPALIVE
  • spring integration
  • ES
  • maxConnTotal
  • Index
  • connectionRequestTimeout
  • springintegration
  • 스프링 인테그레이션
  • 인덱스 템플릿
  • 스프링 인티그레이션

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
꿀똥벌레

꿀똥벌레 개발 블로그

IOS

스위프트 키워드

2022. 10. 4. 10:24
class Person {
	var name: String
    var age: Int
    
    init(name: String ,age: Int) {
    	self.name = name
        self.age = age
    }
    
    convenience init(name: String) {
    	self.init(name: name, age: 30)
    }
}

is, as (타입캐스팅)

is

서브 클래스인지 확인 하는 연산자로, bool 을 리턴한다.

let test: Character = "A"
test is Character // true
test is String // false

as

업캐//스팅 혹은 다운캐스팅 시에 사용한다.

//업캐스팅
let human = Teacher.init() as Human // 상위 클래스인 Human 타입으로 변수가 선언된다.
//다운캐스팅 - 부모클래스를 자식클래스로 캐스팅 하는 것으로 실패할 수도 있다. 
//as? 로 다운캐스팅 시 성공하면 옵셔널 Student 로 변수를 갖게 되고, 실패시 nil을 갖게 된다.
let student: Student? = human as? Student
//as! 로 다운캐스팅시 옵셔널 강제 해제이므로, 즉시 Student 변수를 갖게 되지만, 실패시 에러를 발생시킨다.
let student2: Student = human as! Student

Any, AnyObject

Any

클래스, 열거형, value 형 전부 지칭 가능하다.

var array: [Any] = []
array.append(1)
array.append("asdf)

AnyObject

클래스 타입만 지칭한다.

var array: [AnyObject] = []
array.append(Human("헤헤"))
array.append(1) //error!

mutating

스위프트에서 클래스는 레퍼런스 타입이고, 구조체와 열거형은 값 타입이다.

값 타입의 내부 속성은 기본적으로 인스턴스 내 메소드에서 수정할 수 없다.

값타잆의 속성을 내부에서 수정하려면 내부 메소드에 mutating 키워드를 붙여야 한다.

struct Point {
    var x = 0
    var y = 0

    //mutating 을 붙이면 self 프로퍼티에 새로운 인스턴스를 할당할 수 있다.
    mutating func move(dx: Int, dy: Int) {
        self = Point(x+ dx, y+dy)
    }
}

struct Stack {
    var stack = [Int]()

    //struct는 값타입 이기 때문에 mutating이 없으면 내부 속성을 수정할 수 없다.
    mutating func push(_ item: Int) {
        stack.append(item)
    }
}

@AutoClosure

함수 선언시 클로저형 파라미터를 함수 사용 부분에서 단순 선언부 처럼 사용할 수 있다.

func test(closure: @autoclosure () -> ()) {
    closure()
}

test(closure: 1 > 2)
  • autoclosure 는 파라미터가 없어야 한다. 리턴 타입은 상관 없다.

convenience init

오브젝트 이니셜라이저를 도와주는 역할 이다.
일반적인 이니셜라이저(designated init)은 모든 필드를 반드시 초기화 해줘야 한다.
convenience init 은 넘어오지 않은 값은 임의로 초기화 하도록 도와준다.

class person {
	var name: String
    var age: Int
    
    init(name: String, age: Int) {
    	self.name = name
        self.age = age
    }
    
    convenience init(name: String) {
    	init(name: name, age: 20)
    }
}

'IOS' 카테고리의 다른 글

스위프트 Attributes  (0) 2022.10.04
스위프트 Generic  (0) 2022.10.04
스위프트 Property Wrapper  (0) 2022.10.04
스위프트 Optional  (0) 2022.10.04
스위프트 프로퍼티  (2) 2022.10.04
    꿀똥벌레
    꿀똥벌레
    개발자 꿀똥벌레 입니다.

    티스토리툴바