정수값을 특정 문자로 구분하여 그룹을 만드려면 NumberFormatter를 사용해야 한다.일반적으로 많이 사용되는 정수값에 원화의 구분자 넣어주는 작업을 예로 들어 코드를 작성해 보았다. extension Formatter { static let withSeparator: NumberFormatter = { let formatter = NumberFormatter() formatter.groupingSeparator = "," formatter.numberStyle = .decimal return formatter }() } 생성한 NumberFormatter에 groupingSeparator를 설정하여 grouping하는 구분기호를 설정해주고, numberStyle에는 십진수를 뜻하는 .decimal..
일반적으로 notification을 등록할 때 notificationName을 만들어 사용하는 경우가 많았다.NSNotificationName에는 이미 구현되있어 신기하고 편하게 가져다 쓰면 유용한 것들이 있었다.그 중에 스크린샷을 찍었을 때 사용되는 notificationName이 있어서 간단히 사용해 보았다. class ViewController: UIViewController { required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) registerForNotifications() } deinit { NotificationCenter.default.removeObserver(self) } private func registerFo..
urlencoded 방식으로 request 요청을 하는 코드를 작성하면서 간단히 정리하는 시간을 가져보았다. 보통 데이터를 매핑할 때 key/value를 사용하는 dictionary 타입을 사용한다. urlrecoded 방식으로 데이터를 보내기 위해서는 string 형태로 변환하는 작업이 필요하다.아래는 그 작업을 flatMap와 join 메서드를 사용하여 코드를 작성해보았다. let urlString = "요청 url" let url = URL(string: urlString) var urlRequest = URLRequest(url: url!) let formData: [String : Any] = ["title": "....", "desc": "..."] // key/value 형태의 데이터를 st..
collectionView에 간단히 paging을 설정할 수 있는 프로퍼티가 있다. collectionView.isPagingEnabled = true 위 코드와 같이 간단히 가능하다. 하지만 이 코드로는 상하좌우에 여백이 생기면 스크롤 시 어그러지는 현상이 발생된다. 난 아래와 같은 페이징 효과를 원했다!!! 그래서 검색을 통해 코드를 보고 내가 원하는대로 만들어 보았다. 아래는 collectionView에 대한 초기 설정이다. class ViewController: UIViewController { @IBOutlet weak var collectionView: UICollectionView! let itemColors = [UIColor.red, UIColor.yellow, UIColor.blue, ..
한글이 포함되어 있는 urlString으로 URL 컨버팅을 해줄 경우, nil 값이 반환되었다.이럴때 characterSet을 지정해주면 간단히 해결된다. let urlString = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=애플" let encodedString = urlString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)! let url = URL(string: encodedString)! 위 예시의 urlString에서는 쿼리 부분에 한글이 있으므로, urlQueryAllowed 타입으로 인코딩 해주었다.원하는 타입은 ..
viewController에서 스크롤 할 때, 특정 위치에서 statusBar의 스타일과 backgroundColor를 변경하고 싶었다.아래 코드와 같이 처음 로딩할 때는 쉽게 변경 가능했다. override func viewDidLoad() { super.viewDidLoad() UIApplication.shared.statusBarView?.backgroundColor = UIColor.clear } // statusBar content style 변경 override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } 그 후 스크롤 시 특정 위치에 도달하면 다시 statusBar 스타일을 변경하고 싶었다.구글형님에게 물어본 ..
화면의 구조를 생각하다보면 collectionViewCell의 내부에 collectionView를 구현하는 경우가 생긴다. 이럴때 발생한 삽질에 대해 끄적거려보려고 한다. // collectionView 클래스 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! Cell cell.data = dataList[indexPath.row] // cell에 데이터 넘겨주는 코드... re..
sizeToFit 함수를 사용하면 텍스트에 맞게 라벨의 크기가 조정됩니다. sizeThatFits 함수는 지정된 크기에 적합한 크기를 계산하여 반환합니다. 반환된 크기를 가지고 width/height 중 원하는 것만 조정할 수 있습니다. var label = UILabel() label.text = “It is test.” // 사이즈가 텍스트에 맞게 조절. label.sizeToFit() // 텍스트에 맞게 조절된 사이즈를 가져와 height만 fit하게 값을 조절. let newSize = label.sizeThatFits( CGSize(width: label.frame.width, height: CGFloat.greatestFiniteMagnitude)) label.frame.height = new..
인스턴스 메서드 안에서 value type 변경 struct 및 enum은 value type 입니다. 기본적으로 value type은 인스턴스 메서드 안에서 변경이 불가합니다. 하지만 선택적으로 mutating 키워드를 붙인 메서드에서는 원하는 프로퍼티를 수정할 수 있습니다. struct Point { var x = 0.0, y = 0.0 mutating func moveBy(x deltaX: Double, y deltaY:Double) { x += deltaX // mutating function 이기 때문에 성공 y += deltaY } } var somePoint = Point(x: 1.0, y: 1.0) // (1.0, 1.0) somePoint.moveBy(x: 2.0, y: 3.0) // (..
함수가 호출되고 종료될 때, 함수 내부에서 변경된 값은 함수 외부의 값에는 영향을 끼칠 수 없습니다. 하지만 함수 호출이 종료된 후에도 변경 사항을 유지해야할 경우, inout 파라미터를 사용합니다. var count = 10 func increment(value: Int) -> Int { return value + 1 } print(increment(value: count)) // 11 print(count) // 10 위 예제를 보면 함수 내부에서 변경된 값이 외부에는 영향이 없는걸 볼 수 있습니다.이는 함수로 전달된 값이 내부적인 상수로 복사되어 전달된 값이기 때문입니다. 함수의 호출 방식중 call by value 라고 생각하시면 됩니다. inout 파라미터를 사용하면 함수로 전달되는 값을 복사하..
- Total
- Today
- Yesterday
- m3u8
- Coordinator
- customAlertView
- pagingView
- carousel
- xib
- ssh
- BaseViewController
- NIB
- TDD
- Video
- UIControl
- Swift
- AssociatedObject
- Closure
- IOS
- Design Pattern
- HLS
- UIButton
- Cleancode
- CollectionView
- UIBarButtonItem
- AVKit
- database
- Realm
- http live streaming
- testing
- permission error
- AVFoundation
- RECORDING
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |