Reactivecocoa: ์‹ ํ˜ธ๊ฐ€ ๋‘ ๋ฒˆ ๋ฐœ์‚ฌ๋จ, distinctUntilChanged๊ฐ€ ์ค‘๋ณต์„ ํฌ์ฐฉํ•˜์ง€ ์•Š์Œ

์— ๋งŒ๋“  2013๋…„ 12์›” 20์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ReactiveCocoa/ReactiveCocoa

์ข‹์•„, ์—ฌ๊ธฐ์„œ ์•ฝ๊ฐ„ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ.

๋‚ด viewModel ์—๋Š” ํ•œ ๋ฒˆ๋งŒ ์„ค์ •๋˜๋Š” searchString ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋‘ ๋ฒˆ ์‹คํ–‰๋˜์–ด ๋‘ ๊ฐœ์˜ API ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ ๋ฐœ์‚ฌ๋˜์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์— ์‹ ๊ฒฝ์“ฐ์ง€ ๋งˆ์„ธ์š”. ํ•˜์ง€๋งŒ ๊ฑฐ๊ธฐ์—๋Š” distinctUntilChanged ์žˆ์–ด์„œ ๊ทธ๊ฒƒ์„ ๋ง‰์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. map ์ค‘๋‹จ์ ์„ ๋„ฃ์œผ๋ฉด queryString ๋Œ€ํ•ด ๋™์ผํ•œ ๊ฐ’์œผ๋กœ ๋‘ ๋ฒˆ ์ ์ค‘ํ•ฉ๋‹ˆ๋‹ค.

RACSignal *searchResultsSignal = [[[[[[[[RACObserve(self, searchString)
    ignore:nil]
    ignore:@""]
    distinctUntilChanged]
    deliverOn:[RACScheduler scheduler]]
    map:^id (NSString *queryString) {
        @strongify(self);
        TCThirdPartyAPIType type = [TCAPIIndividual thirdPartyAPITypeForAPITypeString:self.activeAPI.APITypeString];
        return [TCThirdPartyAPIHelper fetchResultsForAPIType:type withQueryString:queryString latitude:self.latitude longitude:self.longitude];
    }]
    switchToLatest]
    map:^id(TCAPIResponse *response) {
        return response.result.array;
    }] catch:^RACSignal *(NSError *error) {
        return [RACSignal return: @[]];
    }];

RACObserve(self, searchString) ์ง์ ‘ ๊ตฌ๋…ํ•˜๊ณ  ์ค‘๋‹จ์ ์„ ์‚ฝ์ž…ํ•˜๋ฉด ํ•œ ๋ฒˆ๋งŒ ํฌ์ฐฉ๋œ๋‹ค๋Š” ์ ์„ ์žŠ์–ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.

question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‹น์‹ ์˜ ๋Œ“๊ธ€์ด ์ œ ๋ผ์ด๋ธŒ๋ฅผ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค :D

๋ชจ๋“  3 ๋Œ“๊ธ€

๋˜ฅ. ์‹ ๊ฒฝ ์“ฐ์ง€ ๋งˆ์š”. ๋‘ ๋ฒˆ ๊ตฌ๋…ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ๋Œ“๊ธ€์ด ์ œ ๋ผ์ด๋ธŒ๋ฅผ ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค :D

๋‚˜๋Š” ์ „์—์ด ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ๊ณ , ๋‚˜๋Š” uitextfiled๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ…์ŠคํŠธ๋ฅผ๋“ค์„ ๋•Œ, ์‹ ํ˜ธ๊ฐ€ ๋‘ ๋ฒˆ ๋ฐœ์‚ฌ๋˜๊ณ , uitextfiled์˜ ์ด์œ ๋Š” FirstResponder๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ , isFirstResponder๊ฐ€ NO๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด YES๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰