2017-11-13 13 views
0

그래서 저는 퀴즈 - 응용 프로그램을 작성 중이며 사용자가 퀴즈를 시작하기 전에 옵션 화면을 제공하고자합니다. 사용자는 퀴즈가 있어야하는 범주를 선택할 수 있습니다.버튼을 선택할 때 배열을 연결하는 방법

현재 한 번에 하나의 카테고리에서만 작동하지만 사용자가 옵션 화면에서 버튼을 선택할 때 questionArrays를 연결할 수 있기를 원합니다.

이 시점에서 사용자는 sender.tag에 따라 'pickedCategory'라는 var을 지나가고 어떤 배열이 질문의 기초가 될지를 결정합니다.

let selectedCategory = quizCategories[pickedCategory] 
    secondVC.allQuestions = selectedCategory.questions 

quizCategories가 맨 위에 선언 : 내가하고 싶은 무엇

var quizCategories = [QuestionArray]() 

4 개 버튼이 있고 하나가 선택 될 때마다에 배열을 연결 이것은 SEGUE 준비에서 발생 selectedCategory

예를 들어, 버튼 1 & 2가 선택됩니다. 즉, 사용자가 2 개의 카테고리를 기반으로 질문하고 싶어합니다. 이런 결과가 나왔습니까?

let selectedCategory = quizCategories[0].questions + quizCategories[1].questions 

3 개 버튼을 선택하면, 등 등이

있습니다 최종 배열, 또 다른 quizCategories 배열을 추가이 아니 내가 찾고 있어요 연결하는 방법은 자동으로 버튼에 따라이 작업을 수행하는 방법 선택 ..

이 내 첫 번째 질문이 게시되고 난 ... U 사람을 혼동하지 않았다 희망 스위프트 매우 새로운 오전 .. 감사합니다 :)

+2

[Swift에서 배열을 어떻게 병합 또는 병합합니까?] (https://stackoverflow.com/questions/25146382/how-do-i-concatenate-or-merge-arrays-in-swift) – Marc

+0

나는 그것을 읽고, 내가 뭘 찾고있는 건지 .. 연결 부분은 좋아, 나는 더 많거나 적게 다른 유형을 알고 그들을 사용하는 방법 ..하지만 난 충분히 알아낼 수있는 숙련 된 아니에요 어떤 버튼이 선택되었는지에 따라 자동으로 수행됩니다. – deadManMoonWalks

+0

토글 버튼이 필요한 것 같고 @IBAction을 만든 다음 버튼의 토글 상태에 따라 연결을 트리거합니다. – Marc

답변

0

각 범주에 대해 버튼을 클릭하고 어느 것이 선택되었는지 추적하십시오 (사용자가 d를 결정하면 선택 취소됩니다). 그 카테고리를 원하지 않음), categoryID 배열에 추가하거나 제거함으로써. 그런 다음 "완료"버튼 (또는 최종 결정 버튼을 탭한 상태)을 선택하면 선택한 categoryID 배열을 가져 와서 flatMap하여 궁극적 인 질문 배열을 생성합니다.

let questions = categoryIDs.flatMap { quizCategories[$0].questions }

지금, 당신은 사용자에게 제시하는 질문의 배열이있을 것이다. 반환 된 배열 배열을 단일 배열로 병합하려면 flatMapmap을 사용하십시오.

+0

함수 프로그래밍을 잘 사용했지만, 선택한 배열을 연결하는 방법을 모르는 사람의 이해를 넘어서는 것 같습니다. –

+0

감사합니다. 이것은 내가 원했던 것과 똑같습니다! – deadManMoonWalks

+0

도움이 되었으면 좋았습니다. –

0
당신이 선택하는 버튼을 추적 할 수 있습니다

원하는 퀴즈를 시작하려면 해당 a를 연결하십시오. rrays.

코드는 다음과 같을 수 있습니다 :

import UIKit 

class QuizzSelection: UIViewController 
{ 
    @IBAction func firstButtonAction(_ sender: Any) 
    { 
    firstButtonWasClicked() 
    } 

    @IBAction func secondButtonAction(_ sender: Any) 
    { 
    secondButtonWasClicked() 
    } 

    @IBAction func goForwardWithQuizz(_ sender: Any) 
    { 
    startQuizzWasClicked() 
    } 

    var isFirstCategorySelected = false 
    var isSecondCategorySelected = false 
    let firstCategoryQuestions = ["Question Cat 1"] 
    let secondCategoryQuestions = ["Question Cat 2"] 
    var emptyArrayOfQuestions = [String]() 

    func firstButtonWasClicked() 
    { 
    if isFirstCategorySelected == true{ 
     isFirstCategorySelected = false 
    } else{ 
     isFirstCategorySelected = true 
    } 
    } 

    func secondButtonWasClicked() 
    { 
    if isSecondCategorySelected == true{ 
     isSecondCategorySelected = false 
    } else{ 
     isSecondCategorySelected = true 
    } 
    } 

    func startQuizzWasClicked() 
    { 
    if isFirstCategorySelected == true{ 
     emptyArrayOfQuestions += firstCategoryQuestions 
    } 
    if isSecondCategorySelected == true{ 
     emptyArrayOfQuestions += secondCategoryQuestions 
    } 
    } 
} 

편집

여섯 개 범주에 대한

향상된 코드 :

import UIKit 

class QuizzSelection: UIViewController 
{ 
    @IBAction func firstButtonAction(_ sender: Any) 
    { 
    firstButtonWasClicked() 
    } 

    @IBAction func secondButtonAction(_ sender: Any) 
    { 
    secondButtonWasClicked() 
    } 

    // Four mour button actions 


    @IBAction func goForwardWithQuizz(_ sender: Any) 
    { 
    startQuizzWasClicked() 
    } 


    var wichCategoryAreSelected = [false, false, false, false, false, false] //six categories 
    var arrayOfQuestions = [["Question 1 Cat 1","Question 2 Cat 1"], ["Question 1 Cat 2", "Question 2 Cat 2"], ...] 
    var emptyArrayOfQuestions = [String]() 


    func firstButtonWasClicked() 
    { 
    wichCategoryAreSelected[0] = !wichCategoryAreSelected[0] 
    } 

    func secondButtonWasClicked() 
    { 
    wichCategoryAreSelected[1] = !wichCategoryAreSelected[1] 
    } 

    func startQuizzWasClicked() 
    { 
    for i in 0...(wichCategoryAreSelected.count-1) 
    { 
     if wichCategoryAreSelected[i] 
     { 
     emptyArrayOfQuestions += arrayOfQuestions[i] 
     } 
    } 
    } 

} 
+0

이 문제는 6 개의 다른 카테고리가 선택한 카테고리의 다양한 조합을 많이 갖게 될 것이므로 if else 문이 많이 있습니까? – deadManMoonWalks

+0

네 말이 맞아. 이 대답은 효율적이지만 쉽게 이해하기위한 것이 아닙니다. 그리고 귀하의 질문은 4 카테고리를 언급했다. 그러나이 코드는 매우 쉽게 개선 할 수 있습니다. (i) 함수 firstButtonWasClicked()를 한 줄에 쓸 수 있습니다. (ii) startQuizzWasClicked()도 루프로 작성할 수 있습니다. – standousset

+0

수동 또는 프로그래밍 방식으로 어떻게 버튼을 만드십니까? 그리고 얼마나 많은 사람들이 당신이 최대로 가질 수 있을까요? – standousset

0

태그 버튼을 식별하는 가장 좋은 방법은 아니지만, I 그걸 무시할거야.

단추를 사용하지 마십시오. UISwitches를 사용하십시오. 각 카테고리별로 전환하십시오.

는 100의 값으로, 일정한 switchTagBase을 말해봐 : 등, 그래서 첫 번째 범주의 스위치 (100)의 태그가
let switchTagBase = 100 

는, 다음 하나는 (101)의 태그가

이미 여러 범주의 배열이 있습니다.당신이 정말로를 유지해야한다고 단순히 범주를 통해 이동, 선택 질문의 배열을 구축 할 시간 때

이제

, 스위치가 켜져있는 파악, 그 범주

var selectedCategories = [QuestionArray]() 
for (index, array) in quizCategories.enumerated() { 
    let thisTag = index + switchTagBase 
    guard let thisSwitch = view.viewWithTag(thisTag), 
    thisSwitch.isOn else { continue } 
    selectedCategories += quizCategories[index] 
} 

에 추가 (참고 사용자가 활성화 한 스위치를 기반으로 선택 상태 배열을 만들고 스위치를 직접 반복하지 않고 해당 배열을 반복합니다. 그러나 간략하게 I 스위치 상태를 직접 가져 왔습니다.)