본문 바로가기

Swift

(27)
[Swift] String과 Character 자료형 개념 뿌수기(unicode scalar, grapheme cluster). Let's d 문자열 알고리즘을 공부하기 전에 한번 복습하면 좋을 것 같아서 String, Character 개념을 정리합니다! String structure String. 문자열 입니다. 정말 많이 사용합니다. Swift에서 제공되는 기본 자료형에 속합니다. Swift's Standard Library에 속합니다. 그래서 import Foundation 없이도 사용할 수 있습니다. String 자료형인 문자열은 Character들로 구성된 컬랙션입니다. 유니코드..? 유니코드란 전 세계 모든 문자를 '컴퓨터'에서 일관되게 표시하고 다룰 수 있도록 특정한 키(숫자 값)로 1대 1 매핑한 표준코드입니다. 영어 한 문자는 1byte입니다. 모든 언어가 1byte면 좋을 텐데 한글은 2byte로 표기합니다. 그렇기 때문에 ..
[Swift] Array's enumerated(). 배열의 각 원소 index 가져오는 방법 예전에도 map을 사용하면서 "index 지원 안하나?" 잠깐 생각해 본 적이 있지만,, 이번에 다익스트라 문제를 풀다가 "map을 쓸 때 element 랑 추가로 index는 동시에 사용 못 할까?" 에 해답을 찾게 되었습니다. 바로 이 함수입니다!! 평소에는 for in 구문을 통해서 배열의 첫 인덱스부터 마지막 인덱스까지 얻었습니다. map을 사용할 때는 index를 미리 선언하고 값을 증가하며 사용 했습니다. 이젠 이 함수를 사용하면 됩니다!! EnumeratedSequence를 반환 하는데 (n,x) 이렇게 쌍을 반환합니다. 여기서 n은 0 ~ Sequence.count-1까지 index를 의미합니다. x는 Sequence의 첫 원소부터 마지막 원소까지를 의미합니다. for (n, c) in "..
[iOS] TableView cell's UIImageView, UIButton object action event 실행 x | ContentView !! Notification 기능 개발을 하고 있었는데 Cell의 subview object들의 action event가 실행되지 않았습니다.. 음..? "Combine을 써서 그런가?" 제 프로필 또한 UIImageView이고 getsture를 등록 했습니다. 원래는 버튼도 터치 이벤트가 먹히지 않았는데,, 계속 고민했고 머리에서 나온 한 가지 해결책이 떠올랐습니다. bringSubviewToFront( ) 이 함수를 이용해 혹시나 덮여서 액션 response가 오지 않을 수도 있겠다고 생각했습니다. 프로필 이미지뷰, 포스트 이미지뷰, 팔로우 버튼 셋 다 bringSubviewToFront()를 통해 앞으로 꺼냈고 버튼은 다행히 반응이 잘 되는데 아직도 이미지들에 부착된 addTarget이 작동하지 않았습니..
[iOS] unrecognized selelctor sent to class 에러 잡기 에러 마주한 상황 여기서 biiou 또는 biiou 옆 프로필 클릭시 상세 프로필로 들어가는 기능을 구현하고 있었어요. 둘 다 같은 함수를 통해서 상세 프로필 화면을 불러오는 액션 메서드를 사용했어요. 근데 버튼일 때는 성공적으로 되지만 프로필을 눌렀을 때는 unrecognized selelctor sent to class 에러가 발생했습니다. 에러가.. 버튼의 경우 addTarget을 통해서 프로필의 경우 UITapGestureRecognizer(target: self, action: #selector(didTapUsername))를 프로필 인스턴스에 부여 했습니다. 같은 함수인데 프로필을 눌렀을 때만 unrecognized selelctor 에러가 떴는데 계속해서 생각하니 오류의 원인을 알게 되었습니..
[Swift] CustomStringConvertible Protocol 파해치기 특정 type을 textual한 표현으로 커스텀해주는 protocol입니다. type이란? 내가 만든 커스텀의 구조체, 클래스, 클래스 등의 타입을 의미합니다. 특정 object를 print(_:)로 출력할 때, CustomStringConvertible protocol을 채택 후 내부 instance인 description을 커스텀 했다면 String(describing:)을 통해 어떤 type이든 string으로 변환시켜줍니다. 주의할 점은 이 프로토콜을 채택한 후에 프로토콜의 instance를 바로 쓰거나 일반 제약조건로 쓰는 것은 비 추천 한다고 명시되어 있습니다. Why use CustomStringConvertible? Let's Deep dive. struct World { let popul..
[Swift] 클로저 @escaping과 @non-escaping의 생명주기, 개념과 차이 탐구 [Swift] ver 5.7 에서 @escaping, @non-escaping closure의 차이를 탐구하는 글 입니다. "형 @escaping과 @non-escaping의 정확한 차이를 모르겠어" ... : 나도 모르겠는데 ??!?! 함수의 생명주기 @Escaping과 @non-escaping 클로저의 차이를 설명하기 전에 함수의 생명주기를 간단하게 설명하려고 합니다. 함수는 계속해서 호출 할 탠데 호출 될 때마다 메모리에 계속 함수들의 정보(매개변수, 함수 안 변수들 등)가 쌓일까요?? X. 함수가 호출을 하는 시점에 스택 영역에 할당 되었다가 함수가 끝나는 시점에 스택 영역에서 해제가 됩니다. 즉 호출을 하면 return 되는 시점에 메모리에서 해제 됩니다. 클로저 정의 여러번 사용되는 코드는 함..
[iOS] Bridging-header file not working, can't use frameworks (FMDB) FMDB라이브러리 사용하기 전에 마주한 에러사항들 1. error opening input file (파일경로~) 이 에러는 브릿징헤더의 경로를 잘못 추가했을 경우입니다. 프로젝트 TARGET -> Build Settings -> Swift Compiler - General -> Objective-C Bridging Header 경로를 Brindging-Header.h 파일이 있는 경로에 맞게 잘 설정해주어야 한다. 타겟 체크하고 이렇게 브릿징 헤더파일이 xproj파일 안에 생성된 경우 Objective-C Bridging Header 경로를 HRApp/Bridging-Header.h 로 설정해주어야한다. ( .h 꼭 붙여야 합니다.) 그렇다면 경로에러는 없는데.. 이렇게 FMDB.h를 import했음에..
[Swift] pickerView component의 리스트 title이 "?" 형태?! textField를 누르면 picker뷰를 통해 등록된 계정을 보여주려고 pickerView를 사용했다. 계정 오른쪽에 textField에 picker뷰를 inputView로 등록했다. 기본적으로 구성한 코드이다. class viewController : UITableViewController ... { var accountList = [ "A@naver.com", "B@naver.com", "C@gmail.com", "D@gmail.com" ] override func viewDidLoad() { let picker = UIPickerView() picker.delegate = self } //MARK: - PickerViewDelegate //피커뷰 몇개의 컴포넌트로 구성될건가?! func numbe..