2016-08-11 37 views
0

我想通過使用委託協議和另一個init類文件將信息從一個swift文件傳遞到另一個視圖控制器。當我調用我想要傳遞的變量時,我的問題就會出現,並且它顯示爲零。我希望能夠在點擊saveButton時將ageDescription從一個swift文件傳遞到另一個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) 
    } 

回答

0

可以使用prepareForSegue覆蓋。

只需在您繼續使用的另一個VC中創建一個變量並將其分配給覆蓋。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 

    // store the instance of Other view controller 
    let destinationVC = segue.destinationViewController as OtherVCclassName 
    destinationVC.variableInNewVC = self.ageDescription 
} 

您還需要將方法外部的ageDescription變量聲明爲全局變量。

+0

我已經將prepareForSegue覆蓋輸入到了我的OtherVC中,但它不能識別self.ageDescription。也許我沒有正確設置全局變量?我在第一個VC中初始化了[var ageDescription:String = String()]。感謝您的耐心,因爲我是Swift新手。 – Kevin

+0

您想要使用正在執行該搜索的按鈕覆蓋視圖控制器上的segue方法,該搜索是您來自的,不打算的。只要確保類內的變量聲明,但不能在任何方法內。 – TheValyreanGroup

+0

如果你無法弄清楚,發佈你的班級名稱,我會用你需要的確切方式編輯我的答案。 – TheValyreanGroup

1

讓班上的協議中,您將得到上述視圖 - 控制數據這樣

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 
    } 
}