Mutating Keyword 사용법 & 예제 인스턴스 메서드란? 인스턴스 메서드는 특정 타입의 인스턴스에 속한 함수를 뜻 합니다. 인스턴스 내부의 프로퍼티 값을 변경하거나 특정 연산 결과를 반환하는 등 인스턴스와 관련된 기능을 실행합니다. 인스턴스 메서드는 함수와 달리 특정 타입 내부에 구현하기 때문에 인스턴스가 존재 할 때만 사용할 수 있습니다. (이 점이 함수와 유일한 차이점) 자신의 프로퍼티 값을 수정할 때 클래스의 인스턴스 메서드는 크게 신경안써도 되지만, 구조체나 열거형 등은 값 타입이므로 , mutaitng 키워드를 붙여서 해당 메서드가 인스턴스 내부의 값을 변경 한다는 것을 암시 해야합니다. 사용 예제 struct LevelStruct { var level: Int = 0 { didSet ..
Initializers (초기화) 사용법 & 예제 Failable initializer 초기화 실패를 옵셔널로 처리하는 방법을 알아보겠습니다. 유형 1 Failable initializer는 초기화에 성공한다면 초기화된 인스턴스가 옵셔널 형태로 return 되고 실패한다면 nil을 return하게 됩니다. init?(parameter) { initialization } 유형 2 초기화 성공되면 (Non-optional) 인스턴스를 return하고 실패한다면 crash가 발생 init!(parameter) { initialization } 사용 예제 struct Position { let x: Double let y: Double init?(x: Double, y: Double) { guard x >= 0..
Initializers (생성자) 를 사용하는 이유 구조체 / 열거형 / 클래스와 같은 설계도를 기반으로 생성한 것을 ‘ 인스턴스’ 라고 합니다. 이 때 인스턴스의 초기화를 담당하는 것이 ‘생성자’ 입니다. 초기화를 사용하는 이유는 모든 속성을 기본값으로 초기화 해서 인스턴스를 기본값 상태를 만들기 위해서입니다. 확인은 생성자 실행 되었을때 모든 속성이 기본값을 가지고 있다는 뜻 입니다. (기본 값 없으면 초기화 실패) Default Initializer 아래와 같이 모든 속성이 초기화 되어 있을 경우 컴파일러가 기본 생성자를 생성해 주기 때문에 따로 작성 할 필요 가 없다. class Position { var x = 0.0 // 속성이 항상 동일한 값으로 초기화 될때 사용 하는 방법 var y = 0..
제네릭 (Generics Function)이란? 형식에 의존하지 않는 범용 코드 사용 코드의 재사용, 유지보수 용이 코드(예시) & 설명 Generic Function //두형식이 모두 INT여야 한다. //다른 형식이 필요하다면 개별적으로 만들어야 한다. -> 함수 구현 중복 func swapInteger(lhs: inout Int, rhs: inout Int) { let tmp = lhs lhs = rhs rhs = tmp } var a = 10 var b = 20 swapInteger(lhs: &a, rhs: &b) a b //Generic Function 사용하여 해결 -> 코드 작성량 비약적 감소 //T는 새로운 형식이 아니라 문맥에 따라 실제 형식으로 대체되는 place holder일 뿐이다 ..
익스텐션(Extension)이란? 이름 그대로 형식을 확장하는데 사용 확장 가능한 것 : Class / Structure / Enumeration / Protocol 멤버를 추가하는 것은 가능 하지만, 기존 멤버를 오버라이딩 하는 것은 불가능(상속을 통해 서브클래싱 해야됨) 코드(예시) & 설명 익스텐션 문법 //확장 가능한 멤버 종류 struct Size { var width = 0.0 var height = 0.0 } //구조체 확장 extension Size { var area: Double { return width * height } } let s = Size() s.width s.height s.area //프로토콜 구현 추가 extension Size: Equatable { //원본을 수정할..
프로토콜(Protocol)이란? 형식에서 제공하는 멤버 목록 프로토콜에 선언 되어있는 필 수 멤버를 모두 구현해야 한다(프로토콜을 채용한다) Protocols protocol protocolName { propertyRequirements methodRequirements initializerRequirements subscriptRequirements } protocol ProtocolName: Protocol, ... { } Adopting Protocols enum TypeName : ProtocolName, ... { } struct TypeName : ProtocolName, ... { } class TypeName : SuperClass, ProtocolName, ... { } Class-On..
연결 리스트( LinkedList ) [1/3] 연결 리스트란 무엇인가? 선형적으로 (직선 같은 ) 단방향 연속성으로 정렬된 값의 모음이다. A collection of values arranged in a linear unidirectional sequence. 배열(Array)와는 다른 구조이다. 특징 값을 가지고 있다. 다음 노드의 ‘참조 정보’를 가지고 있다. (참조 정보를 가지고 있기 때문에 다음 노드를 가리킬 수 있다.(포인터 역할)) 위의 설명을 바탕으로 실제 코드로 구현합니다. 코드 & 설명 Node 구현 public class Node { //Node 클래스를 라는 Generics 타입으로, public 으로 모든 모듈에서 접근 가능하도록 정의 한다. public var value: Va..
Web App 구현하기 ** 웹 사이트 검색 및 페이지 컨트롤 할 수 있는 Web App 입니다. ** 페이지 이동, Html, File(Html), refresh, stop, 앞 뒤 페이지 이동 을 구현하였습니다. 결과 화면 코드 & 설명 import UIKit import WebKit class ViewController: UIViewController, WKNavigationDelegate { @IBOutlet var textUrl: UITextField! @IBOutlet var myWebView: WKWebView! @IBOutlet var myActivityIndicator: UIActivityIndicatorView! //특정 웹페이지 로드 하는 함수(url인수로 해서) func loadWe..