Swift 5-在类之间传递数据的问题

问题描述 投票:0回答:1

作为学习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数据...

swift xcode global-variables parameter-passing
1个回答
0
投票

问题是您正在TestGlobalData类中,特别是在pushData()函数中创建TestViewController的新实例。

© www.soinside.com 2019 - 2024. All rights reserved.