【发布时间】:2018-06-11 10:37:26
【问题描述】:
我是一个新手 swift 程序员,我被要求编写一个应用程序,让你输入一个单词,然后生成一个随机 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)
}
}
Ps,“Dict”是另一个文件,但只包含单词。
第二个视图控制器是空白的。
【问题讨论】:
-
“我尝试创建一个函数,除了返回它们之外什么都不做,然后在 SecondViewController 中调用该函数”——我们需要查看您尝试的此函数,以及您尝试调用的方式它来自第二个视图控制器。您发布的代码对解决您的问题没有用处。
-
func getData() -> (String, String, String) { return (lineOneTextField.text, lineTwoTextField.text, lineThreeTextField.text) }
-
是的,您是如何尝试从您的第二个控制器调用它的?
-
我在一个名为的函数中创建了第一个视图控制器的实例: override func viewDidAppear(animated: Bool) { let firstViewController = FirstViewController() let data = firstViewController.getData() lineOneLabel.text = data .line1 lineTwoLabel.text = data.line2 lineThreeLabel.text = data.line3 }
-
让 firstViewController = FirstViewController() 创建一个新的 FirstViewController 实例,它不会获得对你已有实例的引用。
标签: ios xcode swift viewcontroller