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 파라미터를 사용하면 함수로 전달되는 값을 복사하..
구조체(struct) 및 확장(extension) 기능을 이용하여 코드를 간결하게 작성하는 방법을 나름대로 정리해보려고 합니다. 아래는 구조체를 이용하여 폰트의 종류나 크기로 예를 들어 코드를 작성해 본 것입니다. import UIKit struct Styles { private init(){} struct Fonts { private init(){} static let light = UIFont(name: "NanumSquareL", size: 12.0)! static let regular = UIFont(name: "NanumSquareR", size: 12.0)! static let bold = UIFont(name: "NanumSquareB", size: 12.0)! static let extra..
로그아웃시 세션을 지우지 않으면 로그아웃이 되지 않는 현상이 있었다.간단하게 모든 세션을 지우는 코드를 적어보았다. // 설치된 날짜 가져오는 코드 let urlToDocumentsFolder: URL? = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last let installDate = try? FileManager.default.attributesOfItem(atPath: (urlToDocumentsFolder?.path)!)[.creationDate] as! Date // 설치된 날짜부터 지금까지의 cookie all clear URLSession.shared.configuration.httpCookieStorag..
navigationBar의 배경과 border를 안보이게 하고 싶은 경우, 아래와 같이 작성해 주면 된다.override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default) self.navigationController?.navigationBar.shadowImage = UIImage() } background는 navigationBar의 배경색을 설정하는 속성이고, shadowImage는 border의 이미지를 설정하는 속성이다. 반대로 navigation..
주로 guard문 보다는 if문을 사용해왔는데, 라이브러리를 사용하다보면 guard문을 종종 볼 수 있었다. guard문의 개념과 if문과 비교하여 언제 사용하면 좋을지 알아보면 좋겠다고 생각하여 정리해본다. guard문은 원하는 조건을 충족하지 않을 때, 흐름을 종료하는 목적으로 사용된다. 아래와 같이 쓰인다. guard else { // 조건문이 false일 경우 실행되는 로직. } if문으로 조건문을 처리해도 상관없는데 guard문을 사용하는 이유는 무엇일까. 서칭을 해보고 나름대로 정리해보면 if문은 조건을 체크하여 처리된 값으로 로직의 흐름을 계속 이어나갈 때 사용되고, guard문은 조건을 체크하여 로직이 실행되기 전에 충돌을 막기 위해 사용된다. 아래는 guard문이 어떻게 사용되는지 코드로..
현재 커서의 앞과 뒤의 텍스트를 나누는 방법을 알고 싶었다.그러기 위해서는 현재 커서의 위치를 가져오는게 선행되어야 했다. let textRange = textView.selectedTextRange print("\(textRange)") // (5, 0)B위 코드는 커서 위치를 가져오는 코드이다.그럼 위치를 이용해서 해당 위치의 전과 후의 텍스트를 가져오는 로직을 구현하면 된다. let textString = textView.text! let textRange = textView.selectedTextRange! let offset = textView.offset(from: textView.beginningOfDocument, to: textRange.start) // 커서 앞에 위치한 텍스트 let ..
let textView = UITextView() textView.textAlignment = NSTextAlignment.center위 코드는 UITextView를 가운데 정렬하기 위해 주로 사용되는 방법중에 하나이다.위 방법은 textView 자체에 대한 스타일을 정의할 때 사용된다.하지만 위 방법 외에도 단락에 대해 스타일을 적용하는 방법이 있다는 것을 알게 되었다. let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.alignment = .center let attributes: [String : Any] = [NSParagraphStyleAttributeName: paragraphStyle] let attrString = NSAttrib..
키보드에 다른 화면을 구성하고 싶을 때 키보드의 높이와 다르게 배치하면 이쁘지 않은 화면이 될 수 있다. 이럴 경우, 아이폰의 종류에 따라 딱 맞는 키보드의 높이를 가져와 사용하면 유용할 것이다. 아래는 키보드가 보일 경우와 숨겨질 경우, 호출되는 notification을 observer로 받아서 키보드의 높이를 구하는 코드이다. 키보드의 높이를 구하는 것 뿐만아니라 다른 로직도 구현할 수 있다. override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // keyboardWillShow, keyboardWillHide observer 등록 NotificationCenter.default.addObserver(self,..
- Total
- Today
- Yesterday
- Realm
- ssh
- NIB
- xib
- AssociatedObject
- AVKit
- http live streaming
- CollectionView
- permission error
- UIBarButtonItem
- Design Pattern
- Video
- HLS
- Closure
- customAlertView
- AVFoundation
- testing
- RECORDING
- IOS
- m3u8
- database
- UIButton
- Coordinator
- Swift
- Cleancode
- carousel
- UIControl
- TDD
- BaseViewController
- pagingView
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |