加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – swift从另一个文件访问变量

发布时间:2020-12-14 17:13:15 所属栏目:百科 来源:网络整理
导读:我是一个新手快速程序员,我被要求编写一个应用程序,允许您输入一个单词,然后生成一个随机的Haiku 这是一个带选项卡的应用程序,带有两个ViewControllers. ?(诗)基于这个词.所以在FirstViewController中我有数据,我想在SecondViewController中以一种很好的方式
我是一个新手快速程序员,我被要求编写一个应用程序,允许您输入一个单词,然后生成一个随机的Haiku
这是一个带选项卡的应用程序,带有两个ViewControllers.
?(诗)基于这个词.所以在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,lineSyllableLenght: 7)
        let lineThree = generateLine(keyWord: keyWord,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”是另一个文件,但只包含单词.

第二个视图控制器只是空白.

解决方法

您需要在第二个视图控制器中传递这样的实例:

var firstViewController: FirstViewController?

然后在知道两者的主实例中:

secondViewController.firstViewController = firstViewController

(例如在awakeFromNib中)假设它们在主实例中是已知的

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

最后在SecondViewController中你可以访问第一个:

firstViewController?.generateLine....

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读