在Swift文件之间传递信息时遇到麻烦

时间:2016-08-11 00:43:08

标签: swift delegates

我试图通过使用委托协议和另一个init类文件将信息从一个swift文件传递到另一个视图控制器。当我调用我想要转移的变量时,我的问题就出现了,它显示为零。我希望能够在点击saveButton时将ageDescription从一个swift文件传递到另一个swift文件。我想知道我可以改变什么,以便可以调用变量。

第一视图控制器

@IBAction func ageChanged(sender: UISegmentedControl) {
    switch age.selectedSegmentIndex {
    case 0:
        print("Under 18")
        var ageDescription = "under 18"
        let data = Data(ageData: ageDescription)

    case 1:
        print("Over 18")
        var ageDescription = "over 18"
       let data = Data(ageData: ageDescription)
    case 2:
        print("Strictly over 21")
        var ageDescription = "strictly over 21"
   let data = Data(ageData: ageDescription)
    default:
        print("IDK")
    }

}

其他视图控制器

@IBAction func saveButtonTapped(sender: UIBarButtonItem) {
    func getData(data: Data) {
        print(data.ageData)
    }

2 个答案:

答案 0 :(得分:1)

在类中创建一个协议,您将在其中获取viewcontroller之上的数据,如此

protocol ageDescriptionDelegte {

    func sendageDescriptiongetData(data: Data)
} 
class ViewController: UIViewController {
weak var delegate: PassDateDelegte?
override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

@IBAction func saveButtonTapped(sender: AnyObject) {
   self.delegate?.sendageDescriptiongetData(ageDescription)//pass your age description

    }
}

在视图控制器中,您要访问的数据符合协议

extension ViewController2: ageDescriptionDelegte {

func sendageDescriptiongetData(data: Data) {
print(data)// this will give you the age description 
    } 
}

答案 1 :(得分:0)

您可以使用prepareForSegue覆盖。

只需在另一个VC中创建一个变量,然后将其转换为并在覆盖中进行分配。

groups

您还需要将方法外的ageDescription变量声明为全局。