본문 바로가기

반응형

전체 글

(161)
[iOS] 커스텀 뷰 만들기(@IBDesignable & @IBInspectable) IBDesignable과 @IBInspectable을 이용해 커스텀 뷰를 만드는 방법에 대해 알아보도록 하겠습니다. 커스텀 뷰를 만드는 이유는 재사용 가능한 뷰를 만듦으로써 조금 더 쉽게 뷰를 사용하기 위함입니다. 1. 초기 세팅 우선 Main.storyboard에 뷰를 하나 만들어줍니다. 이 뷰를 ViewController.swift 파일에 @IBOutlet 으로 연결해줍니다. 저는 boxView로 이름을 만들었습니다. 다음으로 커스텀 뷰를 정의할 파일인 CustomView.swift 파일을 만들어줍니다. 2. @IBInspectable @IBInspectable은 스토리보드에서 뷰를 클릭했을 때 보이는 인스펙터에 속성을 보여주는 역할을 합니다. 말로는 이해가 잘 되지 않으실 수 있습니다. 아래 사진을..
[iOS] defer 블록 defer 블록은 함수나 메소드에서 코드의 흐름과 상관없이 가장 마지막에 실행되는 블록입니다. 지연블록이라고 부르기도 하는데, 이 블록에 작성된 구문은 항상 함수의 종료 직전에 실행되기 때문에 종료 시점에 맞추어 처리해야 할 구문이 있다면 우리는 어디에 작성해야 할지 고민하지 않고 defer 블록에 넣어두기만 하면 됩니다. 특징 defer 블록은 작성된 위치와 순서에 상관없이 함수가 종료되기 직전에 실행된다. defer 블록을 읽기 전에 함수의 실행이 종료될 경우 defer 블록은 실행되지 않는다. 하나의 함수나 메소드 내에서 defer 블록을 여러 번 사용할 수 있다. 이때에는 가장 마지막에 작성된 defer 블록부터 역순으로 실행된다. defer 블록을 중첩해서 사용할 수 있다. 이때에는 바깥쪽 de..
[코딩테스트 입문] Swift - Day 7 1. 2차원으로 만들기 Q. 정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요. num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다. func solution(_ numList:[Int], _ n:Int) -> [[Int]] { (0...(numList.count/n)-1).map { Array(numList[(n * $0)...((n - 1)+(n * $0))]) } } 2. 공던지기..
[iOS] 접근 제한자 간단 정리 접근 제한자 객체의 접근 범위를 명시적으로 정의하기 위해 제공된다. 이 접근 제한자들은 클래스나 메소드, 프로퍼티 앞에 작성되어 개별 객체와 속성에 대한 접근을 단계별로 허용하거나 차단하는 기능을 수행한다. 1. private 이 접근 제한자로 선언된 클래스와 메소드, 프로퍼티는 같은 클래스 내에서만 접근이 가능합니다. 2. fileprivate (3.0 버전부터 추가) 이 접근 제한자로 선언된 클래스와 메소드, 프로퍼티는 같은 파일 내에서 접근이 가능합니다. 3. internal 이 접근 제한자로 선언된 클래스와 메소드, 프로퍼티는 같은 모듈 또는 프로젝트 내에서 접근이 가능합니다. 접근 제한자를 선언하지 않고 클래스나 메소드, 프로퍼티를 정의하면 컴파일러는 기본적으로 internal 범위를 적용합니다..
[iOS] Xcode 14, iOS 15 에서 Navigation Bar Color 설정 방법 Xcode 14, iOS 15 에서 NavigationBar Color 설정 방법에 대해서 ... ISSUE "꼼꼼한 재은 씨의 스위프트 실전편" 을 학습 중에 Navigation Bar 를 커스텀하는 과정에서 문제가 있었습니다. 바로 책에서 제안하는 방법으로는 iPhone 14 Pro 시뮬레이터에서는 내비게이션 바의 색상이 변경되지 않는 문제가 있었습니다. 책에서 제안하는 방법대로 아래와 같이 내비게이션 바를 설정했었습니다. (꼼꼼한 재은 씨의 스위프트 실전편: 368p) import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() self.initTitle() } func in..
[iOS] 강한 참조와 약한 참조 강한 참조와 약한 참조 아웃렛 변수는 스토리보드에 정의된 객체를 커스텀 클래스에서 참조할 수 있도록 연결된 변수입니다. 이는 스토리보드의 객체와 직접적으로 연결되기 때문에, 해당 객체의 속성을 커스텀 클래스에서 직접 호출할 수 있습니다. 오늘은 이 아웃렛 변수를 선언할 때, 설정창 하단에 있는 [Storage] 영역의 옵션에 대해 알아보도록 하겠습니다. [Storage] 영역의 옵션은 "Strong"과 "Weak"이 있습니다. 기본 값은 "Weak" 옵션입니다. 해당 옵션은 iOS 시스템(ARC)에서 변수의 메모리 관리와 관련이 있습니다. "Strong" 타입은 강한 참조, "Weak" 타입은 약한 참조라고 부릅니다. ARC(Auto Reference Counter): '특정 변수를 몇 군데에서 사용하고..
[코딩테스트 입문] Swift - Day 6 1. 직각삼각형 출력하기 Q. "*"의 높이와 너비를 1이라고 했을 때, "*"을 이용해 직각 이등변 삼각형을 그리려고합니다. 정수 n 이 주어지면 높이와 너비가 n 인 직각 이등변 삼각형을 출력하도록 코드를 작성해보세요. import Foundation let n = readLine()!.components(separatedBy: [" "]).map { Int($0)! } (1...n[0]).forEach { print(String(repeating:"*", count:$0))} 2. 외계행성의 나이 Q. 우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있..
IT 관련 용어 정리노트 1. 네트워크 관련 용어 1-1. 네트워크 통신의 종류 1) TCP/UDP를 사용하는 소켓 방식의 연결성 통신 2) HTTP, HTTPS, SMTP 등의 프로토콜을 이용한 비연결성 통신 1-2. 연결성 통신 보통 저수준(Low-Level) 통신을 통하여 구현 앱과 서버가 연결되면 한 쪽에서 명시적으로 끊기 전까지는 연결을 유지하는 방식 특징 - 연결이 지속되고 있기 때문에 빠르게 메시지를 주고받을 수 있는 장점 - 네트워크 대역을 많이 소모하고, 서버 부하도 크다는 단점(비용이 많이 든다.) - 메신저나 화상 통화, RPG 게임 등에서만 제한적으로 사용 TCP(전송 제어 프로토콜)연결: 데이터 유실을 방지하고 완전한 전송을 보장하지만 상대적으로 느린 연결 방식 UDP(사용자 데이터그램 프로토콜)연결: 데..
[코딩테스트 입문] Swift - Day 5 1. 피자 나눠 먹기 (2) Q. 머쓱이네 피자가게는 피자를 여섯 조각으로 잘라 줍니다. 피자를 나눠먹을 사람의 수 n이 매개변수로 주어질 때, n명이 주문한 피자를 남기지 않고 모두 같은 수의 피자 조각을 먹어야 한다면 최소 몇 판을 시켜야 하는지를 return 하도록 solution 함수를 완성해보세요. func solution(_ n:Int) -> Int { var remainder: Int = 1 while 6 * remainder % n != 0 { remainder += 1 } return remainder } 2. 피자 나눠 먹기 (3) Q. 머쓱이네 피자가게는 피자를 두 조각에서 열 조각까지 원하는 조각 수로 잘라줍니다. 피자 조각 수 slice와 피자를 먹는 사람의 수 n이 매개변수로 주..
[iOS] 이전 화면으로 값을 전달하는 방법 Description 동기방식으로 이전 화면으로 값을 전달하는 방법에 대해 설명하고자 합니다. (iOS 13 이후 버전에서는 Present Modally 방식에서 full screen이 아닌 경우 실행되지 않는다고 합니다. 해당 이슈에 대해서는 아래에서 서술하도록 하겠습니다.) 동기방식은 저장소를 이용하지 않고 직접 값을 이전 화면으로 전달하는 것이라고 할 수 있습니다. 두 번째 View Controller에서 첫 번째 View Controller로 값을 직접 전달하는 방법입니다. 우선 프로젝트를 생성한 후에 첫 번째 ViewController 와 두 번째 View Controller 인 FormViewController를 아래 그림과 같이 만들어 줍니다. 첫 번째 ViewController에는 Labe..

반응형