본문 바로가기

분류 전체보기

(66)
[WWDC Video Study] Making Apps More Accessible With Custom Actions Link Making Apps More Accessible With Custom Actions - WWDC 2019 - Videos - Apple Developer 사용자 지정 작업은 두 가지에 매우 적합하다. 앱의 잡동사니를 줄이는 것 → 보조 기술을 사용하는 사용자에게 특히 중요 앱에서 보다 복잡한 상호 작용의 편의성과 속도를 개선하는 것 잡동사니를 줄여보자 Voice Over Voice Over는 시각장애인과 저시력을 가진 사람들을 위해 많은 제품에 내장된 스크린 리더이다.(스와이프를 통해 이동 가능하다.) 위의 땅콩버터 리스트 앱에서 GIFF의 등급을 올리려면 어떻게 해야할까? 찾고있는 병을 찾을 때 까지 아래의 리스트를 눈으로 보고 찾을 것이다. 왜냐, UI를 논리적으로 묶어 직관력을 제공해주기..
[Swift] 배열 index 조회 및 삭제하기 배열(정확히는 Collection)에서 값을 조회하는 방법을 알아보자. firstIndex(of:) 는 배열의 앞에서부터 조회해서 첫번째 일치하는 값의 index를 반환한다. lastIndex(of:) 는 배열의 뒤에서부터 조회해서 첫번째 일치하는 값의 index를 반환한다. var arr: [String] = ["일번", "이번", "삼번", "사번", "이번", "육번"] if let firstIndex = arr.firstIndex(of: "이번") { print(firstIndex) // 1 } if let lastIndex = arr.lastIndex(of: "이번") { print(lastIndex) // 4 } 반환된 값은 Int? 이다. (조회했을 때 일치하는 값이 없을 경우가 있기때문에 ..
[RxSwift] Combining Operator startsWith Observable 시퀀스 앖에 다른 값 하나를 추가해준다 let disposeBag = DisposeBag() let numbers = Observable.of(2,3,4) let observable = numbers.startWith(1) observable.subscribe(onNext: { print($0) }).disposed(by: disposeBag) // 1 // 2 // 3 // 4 concat startWith와 비슷하다. startWith는 하나의 요소가 맨 앞에 추가되지만, concat은 여러 개의 요소가 앞 뒤로 추가 가능하다. let first = Observable.of(1,2) let second = Observable.of(4,5) let observab..
[RxSwift] Transforming Operator toArray completed가 된 시점 까지의 데이터를 array로 바꿔서 emit한다. Observable.of(1,2,3,4,5) .toArray() .subscribe(onSuccess: { print($0) }) // [1, 2, 3, 4, 5] 영상에는 .toArray()가 Observable인데 RxSwift 5.0부터는 Single로 바뀐 듯 하다. 그래서 .subscribe(onNext: ) 가 안됨.. map swift에서 사용하는 map과 같다. 다른 것이 있다면 observable하게 작동한다는 점? Observable.of(1,2,3,4,5) .map { return $0 * 2 }.subscribe(onNext: { print($0) }).disposed(by: disposeB..
[함수형 프로그래밍] Maybe & Either Maybe 값의 부재 가능성을 표현 funtor이자 monad 값이 nil로 변할 가능성이 없는 transform의 경우 map사용(functor) 값이 nil로 변할 가능성이 있는 transform의 경우 flapMap사용(monad) Optional 이 곧 maybe enum Maybe { case None case Some(A) static func pure(_ value: B) -> Maybe { return .Some(value) func flapMap(_ f: (A) -> Maybe) -> Maybe { switch self { case .None: return .None case .Some(let value): return f(value) } } func map(f: (A) -> B) -> ..
[함수형 프로그래밍] Functor와 Monad Functor map 함수를 지원하는 컨테이너 타입(map을 구현하는 타입) Context + value + map transform = Functor Context → 어떤 value 가 처해 있는 상태 Collection, Optional 등의 값을 가지는 container 포함하는 value가 generic으로 표현 되어야 함 Value → Context에 넣어지는 실제 내용 Context가 generic으로 표현되기 때문에 어떤 타입의 value라도 사용 가능 Transform → 어떤 값 T를 U로 변환해 주는 function T와 U는 같은 타입이여도 상관 없음 컨테이너에서 값을 뺀 후, 값에 특정 함수를 적용해 타입과 값을 변경하고, 다시 값을 컨테이너에 넣는 것 Array 타입은 map 함..
[Swift] mailto와 MFMailComposeViewController 일하다가 mailto와 MFMail~의 차이점이 뭔지 궁금해져서 찾아봤다. mailto는 메일 앱을 통해메일을 보내는 것이고, MFMailComposeViewController는앱 내에서메일을 보내는 것이다. 메일 계정(설정 - 암호 및 계정)이 없을 경우 MFMailComposeViewController에서 false를 반환한다. class mailTest: MFMailComposeViewControllerDelegate { func sendMail() { let email = "ksmini0212@gmail.com" let subject = "Hello." let bodyText = "It's me" if MFMailComposeViewController.canSendMail() { // 메일 계정이..
[RxSwift] Filtering Operator filtering Operator를 이용하면 .next이벤트에 조건부 제약 조건을 적용해 처리하고자 하는 요소만 받을 수 있도록 할 수 있다. ignore .next event는 무시한다. .error이나 .complete는 전달한다.(종료되는 시점만 알 수 있음) let strikes = PublishSubject() let disposeBag = DisposeBag() strikes .ignoreElements() .subscribe { _ in print("[Subsscription is called]") }.disposed(by: disposeBag) strikes.onNext("A") strikes.onNext("B") strikes.onNext("C") strikes.onCompleted() ..