2015-01-17 5 views
3

저는 초보자 프로그래머입니다. 단어를 입력하고 무작위로 Haiku를 생성 할 수있는 앱을 작성해야합니다. 두 개의 ViewController가있는 탭 응용 프로그램입니다. . 그 단어에 기초한 (시). 그래서 FirstViewController에서 데이터가 있고, 그 데이터를 좋은 방법으로, SecondViewController에 표시하고 싶습니다. 나는 모든시 라인과 모두 FirstViewController에 있지만, SecondViewController에서 이러한 변수에 액세스하려고합니다. 함수를 만들려고했지만 아무 것도 반환하지 않고 함수를 호출하는 SecondViewController에서 결과를 얻지 못했습니다. 함수는 단순히 nil을 반환하기 때문입니다. 아무도 도와 줄 수 있다면 기뻐하실 것입니다 고마워요! 여기 다른 파일에서 변수에 빠르게 액세스하기

가 FirstViewController입니다 :

import UIKit 
import Foundation 


class FirstViewController: UIViewController, UITextFieldDelegate { 

@IBOutlet weak var keyWordTextField: UITextField! 

@IBOutlet weak var syllableSlider: UISlider! 
@IBOutlet weak var syllableSliderLabel: UILabel! 
var syllableSliderValue = 1 


@IBOutlet weak var lineOneTextField: UITextField! 

@IBOutlet weak var lineTwoTextField: UITextField! 
@IBOutlet weak var lineThreeTextField: UITextField! 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    lineOneTextField.text = "Rad 1" 
    lineTwoTextField.text = "Rad 2" 
    lineThreeTextField.text = "Rad 3" 


} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

@IBAction func syllableValueChanged(sender: UISlider) { 
    syllableSliderValue = Int((sender.value)) 
    syllableSliderLabel.text = "Ordet har: \(syllableSliderValue) stavelser" 
} 


@IBAction func getNewHaiku() { 
    if keyWordTextField.text != "" { 
     let keyWord = keyWordTextField.text 
     let lineOne = generateLine(keyWord: keyWord, syllables: syllableSliderValue,  lineSyllableLenght: 5) 
     let lineTwo = generateLine(keyWord: keyWord, syllables: syllableSliderValue, lineSyllableLenght: 7) 
     let lineThree = generateLine(keyWord: keyWord, syllables: syllableSliderValue, lineSyllableLenght: 5) 
     lineOneTextField.text! = lineOne 
     lineTwoTextField.text! = lineTwo 
     lineThreeTextField.text! = lineThree 
    } 

} 
func generateLine(#keyWord: String, syllables : Int, lineSyllableLenght : Int) -> String { 
    let oneSyllables = Dict().oneSyllables 
    let twoSyllables = Dict().twoSyllables 
    let threeSyllables = Dict().threeSyllables 
    let fourSyllables = Dict().fourSyllables 

    let randomOneSyllableWordNumber = Int(arc4random_uniform(UInt32(oneSyllables.count))) 
    let randomTwoSyllableWordNumber = Int(arc4random_uniform(UInt32(twoSyllables.count))) 
    let randomThreeSyllableWordNumber = Int(arc4random_uniform(UInt32(threeSyllables.count))) 
    let randomFourSyllableWordNumber = Int(arc4random_uniform(UInt32(fourSyllables.count))) 

    var lineArray : [String] = [] 
    var line = "" 
    lineArray.append(keyWord) 

    if syllables == 1 { 
     let randomWordMethod = Int(arc4random_uniform(2)) 

     if randomWordMethod == 0 { 

      lineArray.append(fourSyllables[randomFourSyllableWordNumber]) 

     } else if randomWordMethod == 1 { 

      lineArray.append(threeSyllables[randomThreeSyllableWordNumber]) 
      lineArray.append(oneSyllables[randomOneSyllableWordNumber]) 
     } else if randomWordMethod == 2 { 

      lineArray.append(oneSyllables[randomOneSyllableWordNumber]) 
      lineArray.append(twoSyllables[randomOneSyllableWordNumber]) 
      lineArray.append(oneSyllables[randomOneSyllableWordNumber]) 
     } 

    } else if syllables == 2 { 
     let randomWordMethod = Int(arc4random_uniform(2)) 

     if randomWordMethod == 0 { 

      lineArray.append(twoSyllables[randomOneSyllableWordNumber]) 
      lineArray.append(oneSyllables[randomTwoSyllableWordNumber]) 
     } else if randomWordMethod == 1 { 

      lineArray.append(threeSyllables[randomThreeSyllableWordNumber]) 
     } else if randomWordMethod == 2 { 
      lineArray.append(twoSyllables[randomTwoSyllableWordNumber]) 
      lineArray.append(oneSyllables[randomOneSyllableWordNumber]) 
     } 
    } else if syllables == 3 { 
     let randomWordMethod = Int(arc4random_uniform(1)) 

     if randomWordMethod == 0 { 
      lineArray.append(twoSyllables[randomTwoSyllableWordNumber]) 
     } else if randomWordMethod == 1 { 
      lineArray.append(oneSyllables[randomOneSyllableWordNumber]) 
      lineArray.append(oneSyllables[randomOneSyllableWordNumber]) 
     } 

    } else if syllables == 4 { 
     lineArray.append(oneSyllables[randomOneSyllableWordNumber]) 
    } 

    if lineSyllableLenght == 7 { 
     let randomWordMethod = Int(arc4random_uniform(1)) 

     if randomWordMethod == 0 { 
      lineArray.append(oneSyllables[randomOneSyllableWordNumber]) 
      lineArray.append(oneSyllables[randomOneSyllableWordNumber]) 
     } else if randomWordMethod == 1 { 
      lineArray.append(twoSyllables[randomTwoSyllableWordNumber]) 
     } 
    } 
    for word in lineArray { 
     line += " \(word)" 
    } 
    line += "," 

    return line 
} 

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    self.view.endEditing(true) 
} 
func getData() -> (line2: String, line3: String) { 

    return (lineTwoTextField.text, lineThreeTextField.text) 

} 


} 

시는 "DICT는"다른 파일입니다,하지만 단어를 포함.

두 번째보기 컨트롤러는 그냥 비어 있습니다.

+0

는 : 어 첫 번째 액세스 할 수 있습니다 두 번째보기 컨트롤러에서 호출하는 방법. 게시 한 코드는 문제를 해결하는 데 유용하지 않습니다. – rdelmar

+0

여기에서 확인이된다 GetData의() FUNC –

+0

f를 -> (문자열, 문자열, 문자열) { 수익률 (lineOneTextField.text, lineTwoTextField.text, lineThreeTextField.text) } –

답변

4

당신은 두 번째 뷰 컨트롤러에서 다음과 같이 인스턴스를 전달해야 모두 알고있는 마스터 인스턴스의 다음

var firstViewController: FirstViewController? 

:

secondViewController.firstViewController = firstViewController 

(예 awakeFromNib의)는 그들이 알려진 것을 가정 마스터 인스턴스의 경우

let firstViewController = FirstViewController() 
let secondViewController = SecondViewController() 

마지막으로 SecondViewControll 우리는 당신이 노력이 함수를 참조해야하고, - "나는 그 함수를 호출 SecondViewController에서 다음을 반환 제외한 아무것도하지 않는 함수를 만드는 시도하고있다"

firstViewController?.generateLine.... 
관련 문제