목록STUDY/SWIFT (24)
정구리의 우주정복
mutating 을 사용하는 경우 : 구조체 안에서 프로퍼티의 값을 수정할 경우 mutating 이 붙지 않는 애들은 1. 구조체나 열거형 등 값 타입의 객체에서 내부 프로퍼티의 값을 변경하기를 원치 않을 때 2. 주로 클래스 대상으로 간주하고 작성된 프로포콜일 때 프로토콜은 혼자 있으면 무능하지만 타입으로 사용하기도 한다 1. 상수나 변수 , 그리고 프로퍼티의 타입으로 사용할 수 있음 2. 함수 , 메소드 또는 초기화 구문에서 매개변수 타입이나 반환 타입으로 프로토콜을 사용할 수 있음 3. 배열이나 사전 혹은 다른 컨테이너의 타입으로 사용할 수 있음 증말 어려워 !
Double 형태에서 익스텐션 사용 Int 형태에서 익스텐션 사용 제곱을 해주는 익스텐션 , let 의 사용은 안된다
사용하지 않아도 스위프트 코드를 작성하는 데에 크게 어려움은 없지만 더욱 강력한 코드를 작성할 수 있다 !! 변수를 열거형으로 대입하면 같은 열거형의 다른 멤버는 .west 이런 형태로 사용할 수 있다 . 값을 읽을땐 .rawValue 를 쓰고 자동할당이 가능하다 열거형을 정의해 사용하는 덕분에 사용자는 마구잡이식 입력을 제한할 수 있을 뿐만 아니라 컴파일러가 자동완성으로 입력을 보소할 수 있는 이점이 생기고 입력해야할 값이 분명해진다. 객체가 늘어나는 점이 부감일지 모르지만 구조적으로 안정된 코드를 설계할 수 있당
만약 let resolution = Resolution() 이렇게 초기화 하려고 하면 오류가 난다 만약 VideoMade 안에 init(){ } 이렇게 빈 구문을 만들어주면 let defalutVideoMade = VideoMade() 이렇게 초기화가 가능하긴 함 옵셔널 체인은 나중에 공부하면서 필요하면 찾아보는걸루 .. 넘 어려워벌힘
클래스 b 에는 name 과 foo가 정의되어 있지 않지만 사용을 하고있다 !! 심지어 값도 대입한다 !! 왜냐면 상속을 받아서 모든 프로퍼티와 메소드를 물려받았기 때문이지 메소드 오버라이딩을 할 때에는 매개변수 타입이나 반환타입을 그대로 유지해야 한다 만약 같은 메소드 이름인데 매개 변수 변화만으로 새로운 메소드가 된다면 그것은 "오버로딩 " 이라고 한다 예전에 super 배울땐 너무 이해가 안됐는데 지금 생각해보면 왜그랬지 싶다
생각보다 별게 없네 .. 타입 메소드는 인스턴스 받은걸로 .fooTypeMethod 하면 오류가 난다 그냥 클래스 이름 Foo.footypeMethod 로 써야함
구조체와 클래스 같은 객체 안에서 만들어진 함수 = 메소드 라고 부른당 메소드와 일반 함수의 차이 1. 구조체와 클래스의 인스턴스에 소속된다는 점 2. 메소드 내에서 정의된 변수와 상수 뿐아니라 클래스 범위에서 정의된 프로퍼티도 모두 참조할 수 있다 3. self 키워드를 사용할 수 있다는 점 !!!인스턴스 메소드 내에서 프로퍼티를 불러올 땐 self 를 써야함 !!! 구조체랑 열거형에서만 쓰이고 클래스에서는 쓰이지 않아욤