Swift
-
Class vs Struct in SwiftSwift 2019. 10. 21. 17:01
공통점 properties와 methods를 정의할 수 있다. subscript를 정의할 수 있다. (subscript syntax를 사용할 수 있다.) init 함수를 통해 초기화 할 수 있다. extension을 사용할 수 있다. protocol로 적합하다. 차이점 class는 다른 class를 상속받을 수 있다. class는 deinitialized 할 수 있다. class는 reference type이고 struct는 value type이다. 특히 마지막 차이점이 중요한데, 이 차이가 우리가 둘 중 무엇을 사용할 지 결정적이기 때문이다. class와 struct의 가장 큰 차이는 struct는 value type, class는 reference type이라는 것이다. value type은 복사할 ..
-
나만의 String 만들기, NSMutableAttributedStringiOS 2019. 10. 14. 15:31
String에 폰트, 색, 굵기 등 여러가지 attributes를 주고 싶을 때 사용한다. String attribute는 [NSAttributedString.Key: Any]의 dictionary 형태로 관리되므로, NSAttributedString.key가 attribute의 이름이 되겠다. var multipleAttributes = [NSAttributedString.Key : Any]() multipleAttributes[NSAttributedString.Key.foregroundColor] = UIColor.green multipleAttributes[NSAttributedString.Key.backgroundColor] = UIColor.yellow multipleAttributes[NSAt..
-
UIToolbar Align items ProgrammaticallyiOS 2019. 10. 9. 16:34
이런 왼쪽, 가운데 오른쪽에 배치된 툴바는 여러 앱에서 흔히 볼 수 있습니다. stroryboard를 사용하면 간단하지만, 오늘은 코드로 짜는 방법을 알아볼까해요! navigationBar는 왼쪽, 오른쪽에 우리가 직관적으로 생각할 수 있는 방법으로 추가할 수가 있지만, 툴바는 조금 다른 방법을 사용해야 합니다. UIToolbar, UIBarButtonItem 우선 툴바와 그 안의 아이템부터 알아봅시다. 기본 구조는 우선 UIToolBar를 만들고, 그 안에 [UIBarButtonItem]을 추가하는 방식이에요. let toolbar = UIToolbar() view.addSubview(toolbar) toolbar.translatesAutoresizingMaskIntoConstraints = false..
-
[RealmSwift Error] Error Domain=io.realm Code=10iOS 2019. 9. 23. 12:29
RealmSwift를 잘 사용하다가 다음과 같은 에러가 발생할 경우가 있다. Error [Domain=io.realm](Domain=io.realm) Code=10 "Migration is required due to the following errors 사실 이 문제는 앱을 지웠다가 깔면 해결되는데, 시뮬레이터에서는 간단하지만 이미 배포된 앱이라면 간단한 문제가 아니다. 이 문제는 초기화 전에 Migration을 시도해서 발생한다. 따라서 초기화 될 때까지 기다리도록 하면 된다. lazy var realm: Realm? = { do { return try Realm() } catch { print("Could not access Realm, \(error)") return nil } }() 간단하게 나..
-
KVO(Key-Value-Observing)Swift 2019. 9. 20. 17:49
객체의 어떤 값이 변경되었을 경우 이를 감지하기 위해 사용한다. KVO는 변수에 코드를 붙여 변수가 변경될 때마다 코드가 실행되도록 하는 방법이다. property observers(willset , didSet)과 아주 유사한데 KVO는 타입 정의 밖에서 observe를 추가한다는 점이 다르다. KVO는 순수 스위프트 코드로는 그리 좋지 않은데, Objective-c 런타임에 의존하고 있기 때문이다. 그래서 NSObject 를 상속받기 위해 @objc 를 반드시 붙여줘야 한다. 특히 KVO는 속성 각각에 @objc dynamic 을 붙여줘야 한다. dynamic 은 objective-c 의 문법의 하난데, 특정 method나 function의 구현을 objective-c 런타임에서 하겠다고 결정하는 것..
-
Swift) 배열의 중복체크Swift 2019. 7. 25. 01:26
두 배열에서 공통된 원소가 있는지, 확인하려면 어떻게 해야할까? 또 중복되는 원소를 제거하려면 어떻게 해야할까? 저같은 초보는 간단해보이는 이 질문의 답을 swift 에서 하기가 참 어려웠습니다.. 그래서 같이 한번 알아볼까해요! 저는 두 가지 방법을 소개해드릴까 합니다. 인덱스를 찾아 두 배열에서 중복 요소들을 제거 중복 요소들을 필터링해서 새로운 두 배열을 만듦 본격적으로 들어가기에 앞서 기본적으로 알아야 할 함수를 먼저 알아보고 가죠! 요소 확인 contains(element: ) 내가 원하는 원소가 있는지 확인하려면 어떻게 해야할까요? 네 배열의 contains(element: ) 함수를 사용하면 됩니다! 하지만 이 아이는 조금 아쉬워요.. 바로 리턴값이 Bool 이라는 것이죠. 네 포함하는지 안..
-
Swift) 소수점 다루기Swift 2019. 7. 22. 22:01
Swift 에서 소수점을 조작하려면 어떻게 해야할까요? 매번 헷갈리는 이 녀석들 제대로 한번 알아보죠! 이번 포스팅의 목표는 이녀석을 풀어보는겁니다! 어려운 문제는 아니지만 이번 포스팅을 다 읽고 저 문제를 수월하게 푸신다면 제 목표는 성공이겠네요 :D Swift 에서 대표적인 소수점 관련 함수 3개가 있습니다. ceil() 소수점 이하를 모두 버리고 정수부에 +1 을 해줍니다. floor() 소수점 이하를 모두 버립니다. round() 소수점 이하를 반올림합니다. 0.5 이상은 1로 올리고 미만은 버립니다. 위 함수들은 Foundation 를 import 해줘야 합니다. 활용 여기까진 알겠는데 한 가지 궁금한 점이 있으실겁니다. 그럼 특정 소수점까지에 대해 적용하고 싶으면 어떻게 하지? 제가 알기론 따..
-
Algorithm) 숫자 하나씩 확인하기Algorithm 2019. 7. 3. 14:49
17037300 와 같이 큰 수를 한 글자씩 확인해야 할 경우가 있습니다. 예를들어 다음과 같은 문제를 풀 경우가 되겠네요. 어려운 문제는 아니지만 꽤나 자주 등장하기 때문에 한번 짚고 넘어가고 싶어 포스팅을 하게 되었습니다 :D 1. 문자열로 바꿔서 하나씩 탐색 제 경우에 가장먼저 떠오른 생각은 문자열로 바꿔서 하나씩 탐색 하기였습니다. 이러한 방식으로 위 문제를 풀면 let numString = String(a*b*c) var numbers = [Int](repeating: 0, count: 10) for s in numString { if let n = Int(String(s)) { numbers[n] += 1 } } 다음과 같이 풀 수 있겠네요. 이러한 방식은 Swift와 같이 형변환이 까다로운 ..