본문 바로가기

분류 전체보기

(360)
후행 클로저 클로저가 아직 익숙하지 않아서 함수에서 사용된 후행클로저를 좀 자세히 알고 싶어서 작성합니다. 후행 클로저함수의 마지막 인수에 클로저 표현식을 전달해야 하고 클로저 표현식이 긴 경우 후행 클로저로 작성하면 가독성이 더 좋아집니다.func someFunctionThatTakesAClosure(closure: () -> Void) { // function body goes here}// Here's how you call this function without using a trailing closure:someFunctionThatTakesAClosure(closure: { // closure's body goes here})// Here's how you call this function wi..
메모리 사용량 확인을 위한 vmmap vmmap(Virtual Memory Map)vmmap이란 Xcode, macOS에서 사용하는 가상 메모리 매핑 도구입니다.특정 프로세스의 메모리 사용량을 맥 가상 메모리로 매핑하여 메모리 사용량을 보여줍니다.터미널에서 사용하며, 실 기기의 메모리가 아니라 맥 기반 메모리를 매핑하게 됩니다.  vmmap 사용방법Xcode에서 빌드 후 특정 프로세스중에서 확인하기 위해 break point를 걸거나 Debug Memory Graph를 열면 좌측에 프로젝트명 PID 번호가 나타나게 됩니다.터미널에서 해당 PID를 이용하여 vmmap을 실행할 수 있습니다.$ vmmap PID_DATA, _TEXT:  실행코드 및 전역변수malloc: 힙 영역malloc guard page: 힙 오버플로우를 방지용 영역stac..
enum의 다른 사용방법 Enum어떠한 객체나 UI같은 하나의 상태를 타입으로 나타낼 때 열거형(enum)을 자주 사용했었습니다.enum State { case run case walk case sleep case eat case seat}// 배열로 사용한다면..?var state = ["run", "walk", "sleep", "eat", "seat"]배열로 사용하면 인덱스 범위를 넘어가거나 올바른 문자열을 받지 못하는 사이드 이펙트를 경험하기도 했습니다.이를 열거형으로 사용하면 정해진 범위의 타입으로 지정할 수 있어서 코드 가독성과 사이드이펙트를 줄일 수 있었습니다. 오늘 알아볼 것은 이런 단순하게 상태에 대한 정의를 넘어서 더 다양한 방식들을 사용해보려고 합니다. 연관값열거형의 case는 각 상..
숫자 야구게임을 프로토콜지향 프로그래밍으로 리팩토링 해보기 숫자 야구게임을 만들어 보며.. 늘 같은 구조로 설계하는 느낌이 들어서 새로운 방법을 시도해보기 위해 최근에 공부했던 protocol을 적극 사용해서 Protocol Oriented Programming 방식으로 리팩토링 해보려고 합니다. 리팩토링하기 전엔 각 기능들을 메서드로 구현하여 클래스 안에 담았습니다.코드는 아래와 같습니다!더보기class NumberBaseballGame { private var answer: [Int] = [] private var records: [(game: Int, tryCount: Int)] = [] private var currentGameIndex = 0 private var currentState: GameState = .none { ..
Swift Protocols 프로토콜(Protocols)프로토콜은 메서드, 프로퍼티, 그리고 특정 작업이나 기능의 부분이 적합한 다른 요구사항의 청사진을 정의합니다.프로토콜 안에는 선언만 하고, 구현부분에서 해당 변수나 메서드를 구현합니다.또한 여러 프로토콜을 채택할 수 있습니다.protocol Named { var fullName: String { get } func introduce()}protocol Aged { var age: Int { get }}class Human: Named, Aged { var age: Int = 10 var fullName: String = "Kim Cheol Su" func introduce() { print("hi i am \(fullName)..
숫자 야구게임 만들기 Swift 기능 설명중복되지 않는 3자리 숫자를 맞추는 게임입니다.각 자리수는 서로 중복되지 않고, 앞자리에는 0이 올 수 없습니다.  입력입력은 문자열을 포함하지 않은 숫자 3자리를 입력받습니다.아래와 같이 올바르지 않는 입력 경우의 수는 다음과 같습니다.- 빈 문자열- 중복된 값이 존재하는 3자리 문자열- 3자리가 아닌 문자열- String값이 섞인 문자열- 0으로 시작하는 문자열// 올바르지 않는 입력값input1 = ""input2 = "122"input3 = "12"input4 = "12e"input5 = "dfe"input6 = "012" 이를 아래와 같이 필터링하는 메서드를 만들었습니다.private func isCorrectInput(input: String) -> Bool { // 문자열의 앞 문자..
UICollectionViewLayout과 UICollectionViewFlowLayout CollectionView는 TableView와 다르게 layout을 설정해주지 않으면 생성시 오류가 발생합니다.CollectionView 생성자에서 인자로 받는 UICollectionViewLayout이 있습니다.왠만한 레이아웃은 UICollectionViewLayout으로 할 수 있지 않을까? 싶었는데 CollectionView 생성 인자로 모두 들어갈 수 있다는 점에서 많이 헷갈렸습니다.이번 기회에 정리해보고자 합니다.  UICollectionViewLayouthttps://developer.apple.com/documentation/uikit/uicollectionviewlayout UICollectionViewLayout | Apple Developer DocumentationAn abstrac..
UIBeizerPath UIBeizerPathA path that consists of straight and curved line segments that you can render in your custom views.공식문서에 따르면, 사용자의 커스텀 뷰에서 렌더링할 수 있는 직선 곡선 세그먼트로 구성된 경로라고 합니다.해당 객체는 UIKit의 Drawing에 속해있는 클래스입니다.한마디로 사용자가 원하는 모양을 그려낼 수 있도록 도와주는 객체라고 생각하시면 됩니다. initUIBeizerPath를 생성하는데 기본으로 주어지는 모양들이 존재합니다.// 기본 생성public init()// 직사각형 모양 CGRect를 인자로 받는다. CGRect(x: ,y: , width: , height: ,) x y 는 그리기의 시작지..