作为学习Swift的练习,我正在创建一个简单的应用,您可以在其中使用ImagePickerController选择照片并获取有关照片的数据。现在,我只是从照片的PHAsset中提取pixelWidth和pixelHeight数据。
[我的设置:我有一个ViewController
类,它是使用Storyboard创建的,包括UI,ImagePickerController和它的委托,该委托在选择照片后将更新另一个名为TestGlobalData
的类中的数据。
我遇到的问题是,虽然我能够将变量从ViewController
更新为TestGlobalData
,但无法在ViewController
上进行更新]
这是我的代码。任何帮助将不胜感激,我完全感到沮丧(如上所述,我也是Swift的新手,所以指出我没有得到的任何基本知识也将不胜感激!)
// TestViewController.swift class TestViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { @IBOutlet weak var testPhotoView: UIImageView! @IBOutlet weak var testWidthLabel: UILabel! @IBOutlet weak var testHeightLabel: UILabel! var testWidthText: String? var testHeightText: String? var selectionFromPicker: UIImage? override func viewDidLoad() { super.viewDidLoad() } // Get imagePickerController /////////////////////////////////////////////////////////////////// @IBAction func getPhotoButton(_ sender: Any) { getImagePicker() } func getImagePicker() { let imagePickerController = UIImagePickerController() imagePickerController.delegate = self imagePickerController.sourceType = .photoLibrary imagePickerController.allowsEditing = false present (imagePickerController, animated: true, completion: nil) } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) { defer { dismiss (animated: true, completion: nil)} guard let selectedImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage else { return } guard let asset = info[UIImagePickerController.InfoKey.phAsset] as? PHAsset else { return } selectionFromPicker = selectedImage let data = TestGlobalData() data.testData = asset // Updates PHAsset data.updateData() // Data shows as updated here data.pushData() // Data shows as updated here too self.updateTestPhoto() // Photo updates successfully (photo does not get passed) self.textToLabel() // Assigns text to UILobel self.checkData() // Data is lost and shows as nil here } // Functions ////////////////////////////////////////////////////////////////////////////// // Assign Text To Label func textToLabel() { testWidthLabel.text = testWidthText testHeightLabel.text = testHeightText } // Update Photo To Selected func updateTestPhoto() { testPhotoView.image = selectionFromPicker } // Final Check
// TestGlobalData.swift class TestGlobalData { var testData: PHAsset? var testWidth = Int() var testHeight = Int() var widthInString = String() var heightInString = String() func updateData() { testWidth = testData!.pixelWidth testHeight = testData!.pixelHeight widthInString = String(testWidth) heightInString = String(testHeight) //widthInString and testWidth updated successfully at this point } func pushData() { let vc = TestViewController() vc.testWidthText = widthInString vc.testHeightText = heightInString //vc.testWidthText show as updated successfully here } }
作为学习Swift的练习,我正在创建一个简单的应用,您可以在其中使用ImagePickerController选择照片并获取有关照片的数据。现在,我只是提取pixelWidth和pixelHeight数据...
问题是您正在TestGlobalData类中,特别是在pushData()函数中创建TestViewController的新实例。