본문 바로가기

code snippet

(19)
[Swift] DateFormatter - ISO8601 DateFormatter를 사용하면 Date와 String(문자열) 간 변환을 할 수 있다. DateFormatter의 dateStyle이나 timeStyle의 값을 이용해서 미리 정해진 형식을 설정할 수 있다. 하지만 대부분의 경우 원하는 형식과 달라서 dateFormat 으로 커스텀하게 설정하는 경우가 많다. let formatter = DateFormatter() formatter.dateFormat = "yyyy.MM.dd" formatter.string(from: Date()) // 2022.12.01 날짜 형식 중에 2023-01-31T09:00:00.000Z 와 같은 형식을 사용하는 경우를 종종 만나게 된다. 그런 경우 dataFormat 설정을 "yyyy-MM-dd'T'HH:mm:ss.SS..
[Rocket.chat] HTTP, HTTPS, URL 설정 채팅 서버로 Rocket chat을 사용하고 있다. 초기 http로 설정하고 이후 https를 적용하고, http -> https 리다이렉션 설정을 했더니 js 로딩시 http가 혼합되는 Mixed Content Error가 발생한다. 해결책을 구글링하다가 발견해서 적용해본자. Rocket.chat은 도커로 동작 중. 몽고디비에 접속한다. 몽고디비 컨테이너 ID 확인 $ sudo docker ps CONTAINER ID IMAGE cea589b3ca4a rocket.chat:latest 809670637dcf mongo:4.0 컨테이너에 접속하면서 몽고디비에 접속 $ sudo docker exec -it 809670637dcf mongo Rocket.chat 대화가 저장되는 몽고디비의 데이터베이스 사용 ..
[iOS] 웹뷰(WKWebView)에서 네이티브로 메세지 전달. 에러 수정 기록 웹킷의 웹뷰에서 window.webkit.messageHandlers를 이용하면 네이티브 영역(Swift 코드 부분)으로 메세지를 전달할 수 있다. WKUserContentController 를 이용해서 메세지의 이름과 메세지가 전달될 때의 처리할 대상(self)를 등록해야 한다. 다음과 같이 작성하면 될 줄 알았다..... let contentController = WKUserContentController() contentController.add(self, name: "hello") webView.configuration.userContentController = contentController 웹뷰에서 webkit.messageHandlers를 통해서 보내는 메세지는 다음과 같이 작성한 메소드에 ..
[iOS] Swift 1.2 swift로 진행하던 프로젝트를 날 잡고 Swift 1.2로 변경했다. 수정한 내용을 정리해본다. 전역 함수 변경 countElement 함수는 count로 바뀌었다. Objective-C 타입 호환 Swift 1.1 에서는 NSString과 String 타입 사이에 자동으로 타입 변환이 가능(bridging)했었다. var str1 : NSString = "NSString String Val" var str2 : String = str1 Swift 1.2 부터는 NSString과 String 사이에 암시적 타입 변환이 지원되지 않는다. 다음과 같이 as를 이용해서 타입 변환 코드를 작성해야 한다. var str1 : NSString = "NSString String Val" var str2 : Stri..
[iOS] 노티 옵저버 등록과 해제 노티에 등록된 감시 객체가 삭제되지 않는 문제가 발생! 수 시간의 디버깅 끝에 원인을 찾았다. 노티 센터에 등록한 옵저버와 옵저버를 삭제하는 코드에서의 옵저버 객체가 달랐던 것이다. 감시 객체를 삭제하는 코드는 다음과 같이 작성했다. 즉 self - 뷰 컨트롤러가 옵저버라고 생각하고 짰는데.. 옵저버를 블록 객체로 등록했었다. NSNotificationCenter.defaultCenter().removeObserver(self) 이 기회에 좀 정리해본다. == 객체를 옵저버로 사용 노티 발생 여부를 감시하는 옵저버(Observer)를 등록하는 방법은 다음과 같다. 이 메소드에서 노티 센터에 등록되는 옵저버는 observer 파라미터의 객체다. // 옵저버 객체 : observerfunc addObserv..
[Node.js] 서버 IP 얻기 서버 IP 주소 얻기function getIPAddress() { var interfaces = require('os').networkInterfaces(); for (var devName in interfaces) { var iface = interfaces[devName]; for (var i = 0; i < iface.length; i++) { var alias = iface[i]; if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) return alias.address; } } return '0.0.0.0'; } from http://stackoverflow.com/questions/3653065/get-..
[iOS] 뷰의 아웃렛 작성시 weak? strong? 스토리보드를 이용해서 뷰의 아웃렛을 작성할 때 다음 그림처럼 Storage 속성에서 Strong과 Weak 중 하나를 선택해야 한다. Strong은 객체를 소유해서 레퍼런스 카운트가 증가하는 프로퍼티고 Weak은 객체를 소유하지 않는 포인터다. Swift 에서는 다음과 같이 생성된다. @IBOutlet var strongView: MyView! @IBOutlet weak var weakView: MyView! 오브젝티브 씨에서는 다음과 같이 생성된다. @property (strong, nonatomic) IBOutlet MyView *strongView; @property (weak, nonatomic) IBOutlet MyView *weakView; Strong으로 선택하면, 뷰 컨트롤러에 작성한 프로..
[Swift] 문자열 자르기 - substring Swift 의 문자열 자르기(substring) 기능은 매우 귀찮다! var str = "Hello, Swift Language" Swift에서 문자열을 자르는 함수 - substring은 String.Index 를 사용하는데, 이게 임의의 값을 설정할 수가 없다!advance 함수를 이용해서 일정 거리(distance)만큼 밀어버린 인덱스(String.Index)를 생성해서 잘라내야 한다. let startIndex = advance(str.startIndex, 1)let endIndex = advance(str.startIndex, 5)str.substringToIndex(endIndex) 다음은 범위(Range)로 문자열을 자르는 코드다. let range = startIndex...endIndex..