비화를 개발하다.

5300 단어 SwiftRx
RxSwift 학습회 @Sansan 강단에 올랐을 때 시연에서 RxMarbles의 퀴즈 앱을 소개했다.코드가 이쪽(★please)에 공개돼서 상점에 갈 필요가 없을 줄 알았는데 GW가 오래돼서 어렵게상점에서 공개하다 결정했어요!
나는 이 보도에서 응용 프로그램의 코드를 소개하고 등단의 내막을 쓰고 싶다.발표 자료 여기 있습니다..

데모



위에서 말한 바와 같이 Rx의 조작원이 응용 전과 후의 Marble에 문제가 발생할 수 있기 때문에 이것은 4명의 정확한 조작자를 선택한 수수께끼 응용 프로그램이다.나는 가능한 한 Rx를 사용하여 코드를 쓰기 때문에 이 응용 프로그램은 놀 수 있을 뿐만 아니라 코드도 읽을 수 있어 매우 수지가 맞는 응용 프로그램이다.

Rx 사용 위치


그럼 바로 코드 소개를 시작하겠습니다.

버튼 헤더 이벤트

    @IBOutlet weak var answerButton1: UIButton!
    @IBOutlet weak var answerButton2: UIButton!
    @IBOutlet weak var answerButton3: UIButton!
    @IBOutlet weak var answerButton4: UIButton!

    private var buttons: [UIButton]  {
        return [answerButton1, answerButton2, answerButton3, answerButton4]
    }

    buttons.forEach { button in
        button.rx_tap
            .subscribeNext { [unowned self] in
                if button.titleLabel!.text! == self.currentAnswer.value {
                    self.correctAnswerCount.value += 1
                    correctSoundAudioPlayer.play()
                } else {
                    incorrectSoundAudioPlayer.play()
                }
                self.currentQuestionIndex.value += 1
            }
            .addDisposableTo(disposeBag)
    }
4개가 선택한 퀴즈인 만큼 스토리보드로 4개의 버튼을 만들어 클릭 시 이벤트를 실시할 필요가 있다.button.titleLabel.text에 답이 적혀 있기 때문에 현재 문제의 답안(current Answer)과 일치하는지 여부에 따라 판정한다.일반적으로 IBAction에서 헤더 이벤트, rx 를 정의합니다.tap을 사용하면 코드를 분산하지 않고 쓸 수 있습니다.

문제 관리

    private let currentQuestionIndex = Variable<Int>(0)
    private let questions = Variable<[Question]>([])
    private let currentQuestion = Variable<Question>(Question(beforeImage: "", afterImage: "", answer: ""))
    private let currentAnswer = Variable<String>("")
    struct Question {
      let beforeImage: String
      let afterImage: String
      let answer: String
    }

    currentQuestionIndex.asDriver()
        .filter { [unowned self] in $0 < self.questions.value.endIndex }
        .driveNext { [unowned self] count in
            let question = self.questions.value[count]
            self.currentQuestion.value = question
            self.currentAnswer.value = question.answer
        }
        .addDisposableTo(disposeBag)
현재 몇 가지 문제가currentQuesionIndex:Variable에서 관리하기로 결정되었습니다.currentQuestionIndex.매번value가 값을 대입할 때마다 처리되기 때문에 문제 배열questions에서 문제를 얻고currentQuestion과currentAnswer에 각각 대입합니다.RxSwift를 사용하지 않고 쓰면didSet만 사용하면 쓸 수 있을 것 같습니다.나는 이 기사를 쓰는 도중에 UI를 업데이트하지 않았기 때문에 드라이브를 사용할 필요가 없다는 것을 알아차렸다. 나는subscribeNext로 쓰는 것이 비교적 좋다고 생각한다.
    private let currentQuestion = Variable<Question>(Question(beforeImage: "", afterImage: "", answer: ""))

    currentQuestion.asDriver()
        .driveNext { [unowned self] question in
            self.beforeImageView.image = UIImage(named: question.beforeImage)
            self.afterImageView.image = UIImage(named: question.afterImage)
        }
        .addDisposableTo(disposeBag)
방금 코드처럼 current Question Index가 업데이트된 후current Question.question은value로 대입되기 때문에current Question의 처리는 위에서 설명한 바와 같습니다.이번에는 RxSwift를 대량으로 사용해서 코드를 썼을 뿐이기 때문에 방금의currentQuestionIndex에서currentQuestion을 얻었기 때문에 그것을 한데 모아 써도 문제없다.

실속 있는 소감


viewDidLoad () 내에서 거의 모든 처리를 쓸 수 있지만, 이 정도에 이르렀는지의 의미는 말할 수 없다.웃음은 인코딩이 분산되지 않았기 때문에 나중에 볼 때 쉽게 볼 수 있지만 View 모델을 가져와 문제 수를 관리하는 것이 좋다고 생각합니다.이 앱 자체는 그렇게 복잡하게 다루지는 않았지만, 현재 몇 문제, 현재 질문과 답이 무엇인지 등 관리하는 변수가 많기 때문에 일반적으로 쓰면 조건 차이 등이 많아 번거로워지지만, 베리아블을 사용하면 특별히 현혹되지 않게 구현된다.

등단시


RxSwift는 업무상 사용한 적은 있지만, 발표되지 않은 지식과 견해가 있다고 말하기는 어렵다.아울러 발표자로서 신청한 것은 좋지만 추첨 1명이 떨어지는 상황에 불과하다.참가 신청자 일람표를 봤는데 엄청나게 많은 멤버라 취소는 들으러 온 분들을 위한 것일 수도 있다.웃긴 웃지만 용기를 내서 강단에 나서는 게 참 좋은 것 같아요.나는 누군가가 이런 보도를 본 적이 있을 것이라고 생각한다. 학습회는 발표자로서 참가하는 것이 좋겠지만, 나는 이렇다고 생각한다.안 좋은 소식 내면 안 된다는 압박감 때문에 그 분야를 엉망진창으로 조사하기 때문에 스스로 가장 잘 배운다.미팅에도 많은 분이 말을 걸어주셔서 기쁘고 기회가 된다면 다시 발표하고 싶어요.가능하면 초대해주세요:)
자신도 뭔가를 발표하고 싶은 사람이 있다면 꼭 발표하는 것을 추천합니다.나는 이런 불안한 발표를 할 수 있을지 모르겠지만 이 문제에 관해서는 더 많은 것을 배우고 싶어서 발표라는 수단을 이용했다고 생각한다. 이렇게 생각하면 된다.웃음은 이 주제를 잘 모르는 사람에게는 발표자의 경험과 지식을 이해하는 것만으로도 가치가 있기 때문에 특별히 발표할 것이 없다고 생각할 필요가 없다.

최후


처음에는 RxSwift의 난이도가 높았지만 즐겁게 썼으니 함께 즐겨봅시다. D 모르는 것이 있으면 직접 물어보세요@nakailand.다시 한 번 말씀드리지만 가능하면 응용 프로그램RxQuiz 프로젝트의 버튼과 ★을 설치하세요.

좋은 웹페이지 즐겨찾기