본문 바로가기

분류 전체보기

(67)
SwiftUI) 다이나믹 리스트 SwiftUI에서 다이나믹한 리스트 만들기 SwiftUI에서 List나 ForEach를 사용할 경우 각 요소를 어떻게 구분할지 지정해줘야한다. 즉, Unique Identifier를 지정해줘야 한다. 이는 두 가지 방식으로 가능하다. 1) Key Path List(landmarkData, id: \.id) { landmark in LandmarkRow(landmark: landmark) } struct Landmark { var id: Int var name: String fileprivate var imageName: String fileprivate var coordinates: Coordinates var state: String var park: String var category: Categor..
iOS) Build input file cannot be found 에러 해결 Git으로 협업할 때 project.pbxproj 충돌 해결 xcode로 작업하다가 다음과 같은 에러가 발생했을 때 여러 원인이 있을 수 있다. Info.plist 파일의 위치가 잘못됐을 때 프로젝트 명을 바꾼 후 경로가 이상해졌을 때 Xcode 10으로 업그레이드 한 후 그치만 나의 경우 Git으로 협업할 때 머지하는 과정에서 project.pbxproj 파일에 충돌이 발생해서였다. 정확히 말하자면 충돌이 발생하지 않았다.😡 아무 충돌없이 머지되어 잘 된줄 알았는데 날벼락같이 저런 에러가 발생했다. 혹시나 하는 마음에 project.pbxproj을 열어보니 문제가 됐던 파일인 Badgeable.swift가 중복되어 생성되어있었다. 나와 다른 팀원이 둘 다 같은 이름의 파일을 생성하고 머지해서 생긴 문제..
iOS) NavigationBar의 Border 지우기 xcode에서 NavigationBar를 만들었을 때 다음과 같이 선이 생긴다. 스토리보드 상에서 지울수 있는 방법이 없을까 찾아봤지만 없는듯하다. 대신 코드에서 지우는 방법을 찾았다. override func viewDidLoad() { super.viewDidLoad() setNavigationBar() } func setNavigationBar() { self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for:.default) self.navigationController?.navigationBar.shadowImage = UIImage() self.navigationController?.navigationBar.layout..
iOS) UITableView로 채팅 UI 만들기(1) 생성 UITableView 생성 UITableView를 스토리보드에 추가한다. 그다음 assistant를 열고 컨트롤러에 IBOutlet으로 연결한다. Prototype Cell 생성 우측 상단의 뷰 인스펙터 중 Attributes를 선택 후 Prototype Cells의 수를 필요한 만큼 증가시킨다. 그다음 File-> New-> File...을 선택하여 스토리보드에 생성된 프로토타입 셀에 대한 뷰 파일을 생성한다. Cocoa Touch Class를 선택 후 subclass는 UITableViewCell을 선택한다. 기본적으로 생성한 셀은 커스텀이다. 생성한 후 반드시 테이블 뷰 셀의 identifier를 지정해줘야한다. message에 해당하는 label과 messageBox에 해당하는 UIView를..
iOS) NSCoding과 Archive를 통한 데이터 저장 - (2) enum type archive 처음에 enum 타입을 통으로 encode했더니 에러가 발생하였다. archive할 때 화나는 점이 encode 하거나 decode할 때 따로 확인하지 않으면 에러가 발생하지 않는다는 것이다. unit test를 생활화하자! 아무 에러없이 돌아가서 문제가 있는지 모르다가 멀티 씬을 적용했을 때 데이터가 초기화 되길래 하나씩 살펴보니 enum에서 문제가 있었다. Convert rawValue to enum enum의 rawvalue인 String 타입으로 encode한 다음 decode할 때 해당 스트링에 매칭되는 enum 값을 찾도록 하였다. enum ProcessedType: String { case processed = "processed", lowFatProcesse..
iOS) NSCoding과 Archive를 통한 데이터 저장 - (1) decode 타입 지정 오류 해결 NSCoding과 NSKeyed(Un)Archiver 디바이스를 껐다 켜도 데이터가 영구적으로 남아있도록 하기 위해 직접 만든 클래스가 NSCoding이라는 프로토콜의 정의를 따르도록 했다. 자세하게 알아보지 않고 그냥 사용법만 대충 보고 구현해봤다. NSCoding프로토콜의 정의를 따르기 위해서는 requred init과 encode 메소드를 구현해야 한다. 개인적으로 이해한 바로는 encode가 데이터를 인코딩 하는 것이고 requred init에서는 인코딩된 데이터를 디코딩하여 쓰는 것이라 생각하고 있다. 위의 메소드를 직접 불러서 사용하기 보다는 NSKeyedArchiver와 NSKeyedUnarchiver를 통해 자동으로 불려지는 것 같다. decode 타입 지..
프로그래밍 방법론) 객체지향프로그래밍(OOP) - (3) 상속과 다형성 객체지향프로그래밍의 특징으로 크게 캡슐화, 은닉화, 추상화, 상속, 다형성이 있습니다. 그 중 상속과 다형성에 대해 알아볼까 합니다. 상속 기존 클래스를 재사용하여 새로운 클래스를 작성하는 것 상속을 통해 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이합니다. 장점 코드 재사용성 코드 중복 제거 프로그램 생산성과 유지보수 향상 오버라이딩 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것 상속받은 메서드를 그대로 사용하기도 하지만, 자손 클래스 자신에 맞게 변경해야 하는 경우에 사용한다. 오버라이딩 조건 자손 클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와 다음의 조건이 같아야 ..
프로그래밍 방법론) 객체지향프로그래밍(OOP) - (2) 객체 비교 객체간의 비교 - 기본 == 기본적으로 객체를 비교할 때 값이 아닌 레퍼런스를 비교합니다. 따라서 a와 b는 같은 값을 가지고 있지만 서로 다른 것으로 나타납니다. a와 c는 같은 값을 참조하고 있으므로 같다고 간주합니다. class Car : NSObject { var horsePower : Int var plate : String init(power: Int, id: String) { horsePower = power plate = id } } let a = Car(power: 200, id: "AX993JE") let b = Car(power: 200, id: "AX993JE") let c = a print(a == b) //
프로그래밍 방법론) 객체지향프로그래밍(OOP) - (1) 객체란? 객체 지향 프로그래밍에서 인스턴스는 해당 클래스의 구조로 컴퓨터 저장공간에서 할당된 실체를 의미한다. 여기서 클래스는 속성과 행위로 구성된 일종의 설계도이다. OOP에서 객체는 클래스와 인스턴스를 포함한 개념이다. 출처: wikipedia 객체지향프로그래밍에서 객체란 무엇인가를 고민하면 떠오르는 용어가 세 가지 있습니다. 바로 클래스, 오브젝트, 인스턴스 입니다. 위 인스턴스의 정의에서처럼 세 가지 개념은 서로 연관되어 있습니다. 각 용어에 대해 더 자세히 알아보자면 다음과 같습니다. Object 실제로 존재하는 것 객체지향이론의 기본 개념은 '실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다.'라는 것입니다. 객체란 실제 세계에서 처럼 실제 사물의 속성과..
분산시스템) 커뮤니케이션 Communication Layered protocols shared memory와 같은 원격에의 메모리를 접근해서 쓰는 것이 없기 때문에 모든 통신은 low level로 메세지를 주고받는 것을 기반으로 해야한다. Agreement among communicating processes 통신을 주고받기 위해서 통신규약이 필요하다. 얼마나 센 전기신호를 1로 표시할지, 마지막 비트가 무엇인지 받는 곳은 어떻게 알지, 메세지가 손상되었는지 아닌지 받는 쪽에서는 어떻게 알지, 데이터 타입은 어떤것으로 할지 등을 정해야한다. OSI model 동의가 필요한 부분이 다양한 레벨에서 있다. 따라서 Open System Interconnection Reference model (OSI model)이 생겼다. 애플리케이..