swift
[Swift] Property
저장 프로퍼티(Stored Property) 인스턴스의 변수 또는 상수를 의미 구조체와 클래스에서만 사용 가능 var, let 키워드 사용 지연 저장 프로퍼티(Lazy Stored Property) 호출이 있어야 값을 초기화하는 프로퍼티 lazy 키워드 사용 let 선언 불가: Constant property인 let은 인스턴스가 완전히 생성되기 전에 초기화해야 하므로 사용할 수 없음 property의 초깃값이 인스턴스의 초기화가 완료될 때까지 알 수 없는 외부 요인에 의존할 때 사용 property의 초깃값에 복잡하거나 계산 비용이 많이 드는 설정이 필요할 때 or 모든 저장 프로퍼티를 사용할 필요가 없을 때 사용 불필요한 성능 저하나 공간 낭비를 줄일 수 있음 주의※: 다중 스레드 환경에서 지연 저장..
부스트코스 iOS 프로그래밍을 위한 스위프트 기초 후기
개인 프로젝트를 하면서, Swift에 대한 개념이 확실히 부족하다는 것을 나 스스로 느끼게 되었다. 그래서 찾아 보다가 부스트 코스에 좋은 강의가 있길래 천천히 들으면서 공부하려고 했는데, 집중해서 듣다 보니까 생각보다 빨리 수료증을 받게 되었다. 강의를 들으면서 static의 용도와 struct와 class의 차이, 여러 가지 고차 함수 등 많은 것을 얻어갈 수 있었다. 개념 정도는 알고 있어도, 써먹기에는 뭔가 좀 부족한 감이 있었는데 이번 기회로 좀 더 명확하게 정립 할 수 있었다. 다음은 ARC와 Generic과 같은 추가적인 문법들을 더 공부해나갈 생각이다. 공부하면서 느낀 건데 정말 배움의 길은 끝이 없는 거 같다... 아무튼 나는 오늘도 한 단계 성장
[iOS] Swfit로 해시태그 기능 구현하기
진행 중이던 프로젝트에서 해시태그 기능을 작업했다. 일단 내가 원하는 기능은 해시태그끼리 붙여놔도 잘 작동되기, 한글 인식하기 정도였는데 마침 어떤 개발자 분의 블로그에 좋은 코드가 있어서 참고를 했다. import UIKit // 한글, 영문, 숫자만 가능 class HashtagTextView: UITextView { var hashtagArr: [String]? func resolveHashTags() { self.isEditable = false self.isSelectable = true let nsText: NSString = self.text as NSString let attrString = NSMutableAttributedString(string: nsText as String) let..
[iOS] UITextView에 링크 거는 법
진행 중이던 프로젝트에서 TextView에 링크를 거는 작업을 해 보았다. 먼저 링크를 걸고 싶은 TextView에 다음과 같은 몇 가지 설정을 해주어야 한다._ = contentTextView.then { $0.isUserInteractionEnabled = true $0.isSelectable = true //Default $0.isEditable = false $0.dataDetectorTypes = .link $0.delegate = self }어떤 설정인지 차근차근 살펴보자. isUserInteractionEnabled먼저 isUserInteractionEnabled는 유저의 이벤트가 event queue로부터 무시되고 삭제됐는지 판단하는 Boolean 값이다.false로 설정하면 touch나 ..
[iOS] UITextView와 UITextField의 차이 정리
UITextView와 UITextField가 자꾸 헷갈려서 기억해 두기 위해 정리하는 글이다. UITextView 애플 공식 문서를 보면, UITextView는 A scrollable, multiline text region. (스크롤이 가능한 여러 줄 텍스트 영역)이라고 나와 있다. 실제로 UITextView는 UIScrollView 클래스를 상속받고 있다. 간단하게 말해서, 텍스트 문서의 본문을 쓸 때와 같이 여러 줄의 텍스트를 입력할 때 사용하는 게 UITextView이다. UITextField 반면에 UITextField는 여러 줄의 텍스트를 입력하는 것은 불가능하다. 텍스트를 한 줄만 입력할 때 사용하는 게 UITextField
[iOS] extension에서 Override하기
발단 슈퍼 클래스인 ReplyTVCell을 상속받은 ReReplyTVCell이라는 서브 클래스에서 메서드 내부를 수정하기 위해 override 선언을 했더니 'Overriding non-@objc declarations from extensions is not supported'라는 에러 메시지가 떴다. 해결 - @objc 열심히 구글링을 했더니 슈퍼 클래스의 메서드 앞에다 @objc를 붙이면 된다는 사실을 알아냈다. extension ReplyTVCell: NuteeAlertActionDelegate { // Super class @objc func showNuteeAlertSheet() {} } 이제 override가 가능해진다! class ReReplyTVCell: ReplyTVCell { // S..
[iOS] 뷰 생명주기(View life cycle)에 대해서 알아보자
뷰 생명주기(View's life cycle)란? - 뷰가 나타나고 사라지는 주기를 말한다. 앱은 하나 이상의 뷰로 구성이 되어 있고, 각각의 뷰들은 라이프 사이클을 가지고 있다. 따라서 뷰의 라이프 사이클을 고려해서 로직을 넣고, 구성해야 한다. 각각 Did와 Will의 차이가 있는데 하나씩 살펴보자. ViewDidLoad : 뷰 컨트롤러 클래스가 생성될 때, 가장 먼저 실행이 된다. 특별한 경우가 아니라면 딱 한 번 실행되기 때문에 초기화할 때 사용할 수 있다. ViewWillAppear : 뷰가 생성되기 직전에 항상 실행이 되기 때문에 뷰가 나타나기 전에 실행해야 하는 작업들을 여기서 할 수 있다. ViewDidAppear : 뷰가 생성되고 난 뒤에 실행된다. 데이터를 받아서 화면에 뿌려주거나, 애..
[iOS] 불필요한 서버 호출 코드 수정하기
프로젝트를 수행하고 있던 중에, 컬렉션 뷰 셀을 초기화와 동시에 서버에서 호출한 데이터를 불러와야 하는 일이 있었다. 그래서 아무 생각 없이 UICollectionViewDataSource 프로토콜의 메서드인 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {} 이 안에다 초기화 코드와 서버 호출 코드를 모두 작성했다. 그랬더니 발생한 문제... 셀이 재사용될 때마다 불필요한 서버 호출이 발생하는 것이다. 내가 원하는 건 단 한번의 서버 호출로 셀에 데이터를 채우고 초기화하는 거라 코드를 수정할 필요가 있었다. override init(frame:..