Ios 在View3之间传递双精度
这里的noob总数为Swift 3。我所需要做的就是通过2个用户输入文本字段将一个双值从一个ViewController传递到另一个ViewController。我已经尝试了许多解决方案,并阅读了有关在ViewController之间传递数据的所有内容。我得到一个“致命错误:在展开可选值时意外发现nil”。我很难理解变量的包装和解包,我相信这很简单 这是我的第一个ViewController:Ios 在View3之间传递双精度,ios,swift,Ios,Swift,这里的noob总数为Swift 3。我所需要做的就是通过2个用户输入文本字段将一个双值从一个ViewController传递到另一个ViewController。我已经尝试了许多解决方案,并阅读了有关在ViewController之间传递数据的所有内容。我得到一个“致命错误:在展开可选值时意外发现nil”。我很难理解变量的包装和解包,我相信这很简单 这是我的第一个ViewController: import UIKit var longitude: Double? var latitude:
import UIKit
var longitude: Double?
var latitude: Double?
class ViewController: UIViewController {
@IBOutlet var getLongitude: UITextField!
@IBOutlet var getLatitude: UITextField!
@IBOutlet var mapbutton: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func MapBtn(_ sender: Any) {
performSegue(withIdentifier: "segue", sender: self)
longitude = Double(getLongitude.text!)!
latitude = Double(getLatitude.text!)!
}
}
这是第二个ViewController:
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let camera = GMSCameraPosition.camera(withLatitude: latitude!, longitude: longitude!, zoom: 6.0)
let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
view = mapView
// Creates a marker in the center of the map.
let marker = GMSMarker()
marker.position = CLLocationCoordinate2D(latitude: latitude!, longitude: longitude!)
marker.map = mapView
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}第一,展开。当您尝试打开变量时,最好测试它是否为零,或者您可以使用if let安全地打开它
第二,将变量从一个VC传递到另一个VC。正如您所知,在iOS中,这些VCs实例与任何其他变量一样。您所需要做的就是尝试获取对该VC的引用,然后将Double分配给其可访问变量。看看这个避免全局可变状态。将数据从一个场景发送到另一个场景 试试这个:
class ViewController: UIViewController {
@IBOutlet weak var longitudeTextField: UITextField!
@IBOutlet weak var latitudeTextField: UITextField!
@IBOutlet weak var mapButton: UIButton!
@IBAction func didTapToMapButton(_ sender: UIButton) {
// I assume your storyboard' name is Main. If not, change it below accordingly
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
// I assume your destination view controller' identifier and type is SecondViewController. If not, change it below accordingly.
if let secondViewController = mainStoryboard.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController {
if let longitude = Double(longitudeTextField.text),
let latitude = Double(latitudeTextField.text) {
secondViewController.latitude = latitude
secondViewController.longitude = longitude
}
present(secondViewController, animated: true, completion: nil)
}
}
}
class SecondViewController: UIViewController {
var latitude: Double?
var longitude: Double?
override func viewDidLoad() {
super.viewDidLoad()
if let latitude = latitude,
let longitude = longitude {
let camera = GMSCameraPosition.camera(withLatitude: latitude, longitude: longitude, zoom: 6.0)
let mapView = GMSMapView.map(withFrame: CGRect.zero, camera: camera)
view = mapView
// Creates a marker in the center of the map.
let marker = GMSMarker()
marker.position = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
marker.map = mapView
}
}
}
您可以在两个控制器之间创建一个segue,并通过重写prepare for segue来传递变量 将该变量传递给新控制器,并在ViewDidDisplay或ViewWillDisplay上将该信息加载到其出口
self.prepare(for: "segueName", sender: self)
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "segueName" {
if let vc = segue.destination as? DestinationViewController {
// Pass Data to New View Controller
}
}
}