일본 갈대 with Combine
TL; DR
- 원소재는 여기 있다
자바의 강의, 시험은'자제함수를 작성하고 기술하세요'라는 문제입니다.
'철성''doc'중 임의의 것을 무작위로 출력합니다.'철성''철성''철성''doc'의 배열이 나타나면'kiyoshi!'출력 후 종료, 함수 작성, 만점 학점 획득(@kumiromilk)March 9, 2016
0. 대상 확인
- “すん”“どこ”“き・よ・し!”출력은 모두receiveValue에서 수신합니다
String
. (=assign을 원하면 할 수 있는 상태를 목표로 합니다.)보도에서input:○○○
의○○○
로 표현하다. - Publisher의
print(_:to:)
디버깅에 사용됨(대답으로 계산되지 않음) - 한번에 "자 요 해요!"출력 후 처리 종료
1. 강을 이루는 수원
먼저'초밥'이나'어디'가 솟아오르는 수원을 만든다.
잘 나오길 바라니까 0.1초 간격으로 한 번씩 출력해주세요.p>
iOS13에서 추가된 사용
Timer.publish(every:tolerance:on:in:options:)
p> let ずんどこ水源 =
Timer.publish(every: 0.1, on: .main, in: .default)
.autoconnect()
.map { _ in Int.random(in:0..<2) == 0 ? "ずん" : "どこ" }
.share()
self.cancellable =
ずんどこ水源
.sink(receiveCompletion: { _ in
print("===完===")
}, receiveValue: {
print("input: \($0)")
})
결과는 여기 있습니다.
좋아.아주 좋아요.기세 있는 용출량p>
2. 센서가 달린 수문 건설
위에서 말한 바와 같이, 수원에서 한 단어 한 단어가 흘러나오다p>
'응, 응, 응, 응, 어디'의 5가지 요소를 검출하고 싶어서 FIFO 방식으로 5개만 저장된 연못을 만든다.
그리고 축적된 요소가 목표의 패턴임을 판단하는 센서를 제작한다.
모드가 감지되면 수문을 닫습니다.
장난 없이 어디로 도망가다p>
let センサー付き水門 =
ずんどこ水源
.scan([], { (reservoir: [String], element: String) -> [String] in
// 溜池
var newReservoir = Array(reservoir + [element])
if newReservoir.count > 5 {
newReservoir.removeFirst()
}
return newReservoir.prefix(5).map { $0 }
})
.allSatisfy { $0 != ["ずん", "ずん", "ずん", "ずん", "どこ"] }
.map { _ in }
.share()
3. 검사 후 "き・き・き!"통지
()
의 흐르는 구조를 활용하여 <き・き・き・ノ!흐르는 스피커 만들기p>
let スピーカー = センサー付き水門.map { _ in "き・よ・し!" }
그래도 나쁘지 않아요.p>
하지만 사치스러우면 "어디"와 "어디!"사이에서 "위하여"를 원합니다.
거기서 1초 정도의'위하여'를 만들어라.
결과에 영향을 미치지 않는 형식으로 원인 확인p>
let スピーカー = センサー付き水門.map { _ in "き・よ・し!" }
.handleEvents(receiveOutput: { _ in
print("(せーの...!)")
})
.delay(for: .seconds(1.0), scheduler: RunLoop.main)
4. 정비된 어느 강의 전모
야천 상태, 곳곳에 필요한 설비가 있다.
그리고 이것들을 잘 조합하세요.
이렇게 하면 하천 관리도 매우 좋다p>
let ずんどこ水源 =
Timer.publish(every: 0.1, on: .main, in: .default)
.autoconnect()
.map { _ in Int.random(in:0..<2) == 0 ? "ずん" : "どこ" }
.share()
let センサー付き水門 =
ずんどこ水源
.scan([], { (reservoir: [String], element: String) -> [String] in
// 溜池
var newReservoir = Array(reservoir + [element])
if newReservoir.count > 5 {
newReservoir.removeFirst()
}
return newReservoir.prefix(5).map { $0 }
})
.allSatisfy { $0 != ["ずん", "ずん", "ずん", "ずん", "どこ"] }
.map { _ in }
.share()
let スピーカー = センサー付き水門.map { _ in "き・よ・し!" }
.handleEvents(receiveOutput: { _ in
print("(せーの...!)")
})
.delay(for: .seconds(1.0), scheduler: RunLoop.main)
self.cancellable =
ずんどこ水源
.prefix(untilOutputFrom: センサー付き水門) // センサーが検知するまで、ずんどこを流す
.merge(with: スピーカー) // 検知したら、き・よ・し!を流す
.sink(receiveCompletion: { _ in
print("===完===")
}, receiveValue: {
print("input: \($0)")
})
자, 마지막으로 이걸 움직여봅시다.
...
....
.....
💪💪💪💪💪💪💪💪💪💪💪💪💪💪💪
후기
농담인 것 같은데, 한번 시도하면 조작원의 행동에 대해 상세해진다
만약 더 좋은 실시례가 있다면 @mshrwtnb 전에 나에게 알려줄 수 있다면 나는 배울 것이다
https://github.com/mshrwtnb/zundoko-combine 소스를 넣었어요.p>
이상
Reference
이 문제에 관하여(일본 갈대 with Combine), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mshrwtnb/items/33c4ac89442b07d134a7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)