본문 바로가기 메뉴 바로가기

Peppo

프로필사진
  • 글쓰기
  • 관리
  • 태그
  • 방명록
  • RSS

Peppo

검색하기 폼
  • 분류 전체보기 (221)
    • Story (13)
    • iOS (143)
      • Error (11)
    • 알고리즘 (43)
    • ETC (7)
    • React-Native (0)
    • CS (Computer science) (3)
  • 방명록

iOS (154)
[Swift] 안전하게 배열 조회 (feat: indices)

오늘은 안전하게 배열을 조회하는 방법에 대해 알아 보려고 합니다. 아래와 같이 배열을 조회하다 엉뚱한 index에 접근하게 되면, 이런 에러를 많이 보실겁니다. let arr = [1, 2, 3] for index in 0...10 { print(arr[index]) // Fatal error: Index out of range } Fatal error: Index out of range Array(배열)의 경우에는 index를 접근해서 가져오는 값이 Optional이 아니라 guard를 쓸 수도 없어 index가 유효하지 않을 경우 꼼짝없이 앱이 다운되어 버립니다. 이런 오류를 방지하기 위해 extension을 이용해 아래와 같은 코드를 적용해줍니다. extension Array { subscript ..

iOS 2022. 9. 5. 00:28
[Swift] compactMap, flatMap

오늘은 고차함수 compactMap과 flatMap에 대해 공부해 보려고 합니다. 먼저 예시로 바로 들어볼게요. 아래와 같은 배열이 있습니다. let arr = [nil, 1, 2, nil, nil, 5] 여기서 nil을 없애고 배열을 반환하고 싶으면 ? 이때 compactMap, flatMap 을 사용하면 돼요! let arr = [nil, 1, 2, nil, nil, 5] let compactMap1 = arr.compactMap { $0 } let flatMap1 = arr.flatMap { $0 } print("compact:\(compactMap1)") // compact:[1, 2, 5] print("flatMap:\(flatMap1)") // flatMap:[1, 2, 5] 이렇게 맛보기만 ..

iOS 2022. 9. 1. 00:12
[Swift] 메모리 안정성 (Memory Safety)

Swift는 코드가 불안전한 동작 발생을 방지합니다. 예를들어, 변수가 사용되기 전에 초기화 된다 거나, 할당이 해제 된 후 메모리에 접근하지 않도록 하거나, 배열 인덱스의 범위를 넘는 등이 있습니다. 이렇듯 Swift에서 메모리 관련해 자동으로 관리해 주기때문에 대부분의 경우에는 Swift언어를 사용하는 사용자는 메모리의 접근에 대해 전혀 생각하지 않고 사용해도 됩니다. 하지만 메모리 접근 충돌이 발생할 수 있는 상황을 이해하고 메모리 접근 충돌을 피하는 코드를 어떻게 작성할 수 있는지 이해하는 것은 중요합니다. 메모리 접근 충돌이 일어나면 런타임 에러, 컴파일 에러가 발생 합니다. 메모리 접근 충돌의 이해 (Understanding Conflicting Access to Memory) 아래 예시를 ..

iOS 2022. 8. 25. 22:14
[Swift] MVVM - 데이터바인딩 databinding(with Observable)

오늘은 개인 프로젝트에 MVVM을 적용해보면서 dataBinding을 할때 Observable이라는 class의 동작 방식을 공부해 보려고 합니다. 가즈아! 아래는 MVVM을 사용하고 데이터 바인딩을 해보셨다면 한번쯤 보셨을 코드입니다. 이런형태가 있구나 하면서 슥 보세요 설명은 아래서 ! class Observable { // 3 var listener: ((T) -> Void)? // 2 var value: T { didSet { self.listener?(value) } } // 1 init(_ value: T) { self.value = value } // 4 func bind(listener: @escaping (T) -> Void) { listener(value) self.listener =..

iOS 2022. 8. 19. 19:32
[Swift] Protocol(프로토콜) - protocol extension(프로토콜 확장)

확장으로 프로토콜 준수 추가 (Adding Protocol Conformance with an Extension) 프로토콜에 extension을 하게되면 기존 타입을 확장할 수 있습니다. 예제를 보면서 이해하는게 더 빠를것 같습니다. 바로가시죠 Extension으로 기본값 지정하기 // 1 protocol Walkable { } // 2 protocol Portable { func port() } // 3 extension Walkable { func walk() { print("걷습니다") } } // 4 struct Human: Walkable, Portable { func port() { print("듭니다") } } var human = Human() human.walk() // 걷습니다 huma..

iOS 2022. 8. 12. 17:36
[Swift] Protocol - 타입 프로토콜, 위임

타입으로서의 프로토콜 (Protocols as Types) 프로토콜은 기능구현을 하지 않습니다. (선언만 할 뿐) 프로토콜을 타입으로 사용할 수 있습니다. 다른 타입이 허용되는 여러 곳에서 다음과 같은 프로토콜을 사용할 수 있습니다. 함수, 메서드 또는 이니셜라이저에서의 매개변수 타입 또는 리턴타입 상수, 변수 또는 프로퍼티로서의 타입 배열, 사전, 다른 컨테이너의 항목으로서의 타입 타입이기 때문에 네이밍은 첫번째 문자를 대문자로 해줍니다. ex) TestType 예제로 바로 봐봅시다 protocol RandomNumberGenerator { func random() -> Double } class LinearCongruentialGenerator: RandomNumberGenerator { var la..

iOS 2022. 8. 10. 16:23
[iOS Error] Build input file cannot be found : info.plist 경로 오류

문제 Build input file cannot be found: 폴더경로/~~~/~~~/~~~/info.plist 오류메시지가 나오면서 Build가 되지 않음. 원인 Xcode 내에서 info.plist를 다른 폴더로 옮겼더니 경로를 찾지 못함 경로 바꾸기전 상태 경로 바꾼 후 상태 프로젝트 폴더/ info.plist 프로젝트 폴더/ Resource/ info.plist 해결 TARGETS → Build Settings → Packaging → 경로 재설정 Besteats/info.plist → Besteats/Resource/info.plist (바뀐경로로 재설정)

iOS/Error 2022. 8. 7. 21:24
[iOS] Responder Chain, FirstResponder

오늘은 Responder Chain, FirstResponder에 대해 정리해 보려고 합니다. :) 사용자가 앱에 터치를 하게 될때 앱이 어떻게 알고 반응하게 되는지 파악하는데 도움이 될거 같아요 !! 바로 스터디 해보겠습니다 . Responder Responder는 이벤트를 처리하고 반응할 수 있는 객체 입니다. 모든 Responder 객체는 UIResponder에서 상속된 클래스의 인스턴스 입니다. Responder Chain 이벤트를 처리할수 있는 Responder를 쭉 찾아내는 것 -> 쭉 찾았을때도 없을시 해당 이벤트를 버림 예 ) UILabel을 터치했다고 가정 해봅시다. Responder Chain은 아래와 같이 동작합니다. 1. 사용자: UILabel 터치 (사용자 -> UILabel) 2..

iOS 2022. 7. 17. 21:28
[Swift] ~= 연산자

~= 연산자 어떤 범위에 포함 되는지 검사할 때 아래와 같이 사용합니다. let num = 3 if 1...10 ~= num { print("포함됨") } // 포함됨 num이 3이므로 1부터 10까지 숫자에 포함 됨으로 "포함됨"을 출력하게 됩니다. 네트워크 통신에서 statusCode가 성공 일때 걸러낼 수도 있습니다. if 200.. Bool { if "a"..."z" ~= str { print("소문자 포함") return true } else { print("소문자가 없습니다.") return false } } findLowerCase(str: "esSS") findLowerCase(str: "ABCD")

iOS 2022. 7. 13. 09:55
[iOS] Unit Test

Unit Test  (Method Test) 하나의 기능을 테스트 하는것작성한 코드가 의도한대로 동작하는지 확인하는 가장 작은 단위의 테스트 입니다. Unit Test 를 왜 하나요? 기능을 세세하게 나누어 테스트 함으로 문제되는 부분을 쉽게 파악할 수 있습니다.전체 프로그램을 빌드하는 대신 작은 단위로 빌드하기 때문에 시간절약도 할 수 있습니다.테스트를 하기위해 몇가지 원칙이 있지만, 여기서는 FIRST 원칙에대해 정리해 보겠습니다. FIRST원칙 Fast: 빠르게   - 테스트가 빠르게 실행되어야 합니다. Independent / Isolated: 독립적으로  - 서로에게 영향을 주면 안됨. Repeatable: 반복 가능하게  - 언제든 같은결과가 나와야 함. Self-Validating: 스스로..

iOS 2022. 7. 10. 19:44
이전 1 2 3 4 5 6 7 8 ··· 16 다음
이전 다음
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
  • Peppo's Github
TAG
  • swift 고차함수
  • Swift 알고리즘
  • swift (programmers)
  • Swift Error Handling
  • Swift 프로퍼티
  • Swift joined
  • RTCCameraVideoCapturer
  • Combine: Asynchronous Programming with Swift
  • Swift RIBs
  • 2023년 회고
  • RIBs tutorial
  • Swift init
  • Swift 내림차순
  • swift programmers
  • removeLast()
  • 원티드 프리온보딩
  • swift reduce
  • Swift
  • Swift ModernRIBs
  • swift protocol
  • Class
  • iOS error
  • CS 네트워크
  • Swift 프로그래머스
  • Swift final
  • swift property
  • Swift joined()
  • Swift Leetcode
  • ios
  • Swift inout
more
«   2025/08   »
일 월 화 수 목 금 토
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함

Blog is powered by Tistory / Designed by Tistory

티스토리툴바