본문 바로가기

반응형

SWIFT

SQLite 데이터 값이 제대로 들어가지 않을 때 unsafeBitCast 사용하기 포인터에 대한 개념이 부족하여 해당함수에 대한 완벽한 이해가 잘 되지 않지만 참고하고 나중을 위해 정리한 글이기 때문에 사실과 다르거나 제가 오해하는 부분이 있을 수도 있으니 참고해주시기 바랍니다. 설명 sqlite 사용하면서 데이터 추가할 때 테이블의 칼럼이 3개 이상일 때에는 마지막 칼럼값으로 값들이 들어가거나 의도하지 않는 값들이 들어가는 것을 확인하였습니다. 그리고 unsafeBitCast 함수를 사용해서 해결할 수 있었습니다. 문제되는 코드 guard prepare(with: sql) else { throw SQLError.prepare } guard bindText(with: name, at: 1) else { throw SQLError.bind } guard bindText(with: bir.. 더보기
WKWebview를 이용한 Javascript, Swift 양방향 통신 아래 작성된 방법은 WebView 가 로드될 때 실행되는 것을 기준으로 하였으며 네이티브 앱에서 버튼을 누르거나 특정 동작을 할 때 Javascript 로 값을 전달하고 싶은 경우에는 아래 블로그에 나온 방법(evaluateJavascript)을 참고합니다. evaluateJavascript 참고 블로그 [SWIFT] 웹뷰와 자바스크립트 연동 (Native JavaScript 통신 방법) 1. Swift → Javascript 1) Javascript의 test() 함수 실행할 때 import UIKit import WebKit class ViewController: UIViewController() { var webview: WKWebView! override func loadView() { let w.. 더보기
@IBDesignable , @IBInspectable in Custom Object 사용된 예제는 꼼꼼한 재은씨의 Swift : 실전편 을 토대로 작성하였으며 설명 또한 인용한 부분이 있습니다. @IBDesignable 커스텀 객체(버튼, 스테퍼 등)를 스토리보드에서 미리보기 하고 싶을 때 해당 클래스 정의 구문 위에 추가합니다. @IBInspectable 커스텀 객체(버튼, 스테퍼 등)의 속성을 스토리보드 내에서 변경하고 싶은 경우 해당 속성을 선언할 때 추가합니다. 설명 커스텀 객체를 만들 때 프로그래밍 방식을 사용하면 디자인 요소에 변화를 주는 경우 빌드를 한 다음 확인을 해야 하는 번거로움이 있지만 @IBDesignable 을 사용하면 스토리보드에서 미리 보기가 가능합니다. 또한, @IBInspectable 을 사용하여 인터페이스 빌더를 통해 커스텀 객체의 속성을 설정할 수 있습.. 더보기
sizeToFit 함수와 center 속성을 함께 사용하는 경우에 작성 순서 sizeToFit 뷰의 크기에 맞게 변경, UIView 의 함수 이며 아래와 같이 Label 에 사용하는 경우에는 해당 라벨 길이에 맞게 크기가 변경됩니다. center 뷰 프레임 사각형의 중심점, 이 역시 UIView 의 함수 이며 Label 프레임의 중심점을 정합니다. 설명 아래와 같이 라벨을 만들 때 sizeToFit 과 center 를 사용하는 경우에는 sizeToFit 을 호출한 후에 center 속성을 설정 해주는 것이 바람직합니다. center 속성은 해당 라벨의 중심점을 정해 주는 역할인데 sizeToFit 함수보다 먼저 오는 경우에는 라벨을 선언했을 때의 길이(y: 100)를 기준으로 설정하기 때문에 원하는 대로 화면에 표시되지 않습니다. 그렇기 때문에 sizeToFit 함수를 호출하여 .. 더보기
클래스 내에 멤버 변수를 사용할 때 초기화 시점에 따른 메모리 차지 비교 인스턴스 label1 은 선언과 동시에 초기화 label2 은 선언과 초기화를 분리하고 viewDidLoad 에서 초기화 설명 프로그래밍 방식의 UI 생성을 연습하기 위해 작성한다면 아래와 같은 코드는 큰 차이점이 없습니다. 하지만 뷰 컨트롤러의 인스턴스만 생성한 후 화면으로 이동하지 않는다면 label1 인스턴스는 메모리만 차지하게 됩니다. 반면, label2 인스턴스는 뷰 컨트롤러가 화면에 표시될 때 인스턴스가 생성되므로 메모리를 미리 차지하지 않습니다. 즉, 특별한 경우를 제외하고 클래스 내에 멤버 변수로 인스턴스를 사용한다면 label2 처럼 사용하기 직전에 인스턴스를 생성하여 메모리를 할당 받는 것이 메모리를 효율적으로 사용할 수 있습니다. 코드 #import UIKit class Cust.. 더보기
Swift 코드 작성시 변수와 함수 순서 정답은 아니지만, 보편적으로 호출순서 혹은 변수부터 함수순으로 정의합니다. 현재 사용하는 순서는 다음과 같습니다. let, var @IBOutlet ViewDidLoad @IBAction function 더보기
프로토타입 셀 제어 두가지 방법 : tag in attribute inspector , custom class 제어방법 1 : tag in attribute inspector 제어방법 2 : custom class 아울렛 변수를 뷰 컨트롤러에 직접 정의하면 셀 내부 객체들이 정적인 객체가 되므로 사용하는데에 문제가 생깁니다. 커스텀 클래스에 아울렛 변수를 정의하면 이는 동적으로 사용할 수 있는 형태의 객체가 되기 때문에 아울렛 변수를 통해 객체를 관리할 수 있습니다. 따라서 태그 속성 사용 시 단점으로 꼽히는 객체 관리 문제나 잘못된 태그값을 호출하는 문제로부터 자유로워질 수 있으며, 유지 보수도 무척 편리해집니다. 방법 UITableViewCell 을 상속 받는 클래스 작성 스토리보드에서 프로토타입 셀의 Class 속성을.. 더보기
이미지 사용 용도에 따른 UIImage 생성자 선택 생성자 종류 1. Loading and Caching Images init?(named: String, in: Bundle?, compatibleWith: UITraitCollection?) init?(named: String) init(imageLiteralResourceName: String) 2. Creating and Initializing Image Objects init?(contentsOfFile: String) init?(data: Data) init?(data: Data, scale: CGFloat) init(cgImage: CGImage) init(cgImage: CGImage, scale: CGFloat, orientation: UIImage.Orientation) init(ciIma.. 더보기

반응형