简体   繁体   English

类Swift中的参考参数

[英]Reference Parameter in Class Swift

I have created the following: 我创建了以下内容:

let artworkPin = Artwork(title:"Wind Wand",locationName:"Majestic",discipline:"Statue",
                             coordinate:windwandcoord)

where Artwork refers to a class located in Artwork.swift, I am trying to assign a label to obtain the title value (Located in a annotation on UI View 1 ) through a Segue to go to a Label ( Located in UI View 2) by doing the following: 其中Artwork指的是位于Artwork.swift中的一个类,我试图通过一个Segue来获取标题值(位于UI视图1上的注释中)以转到标签(位于UI视图2中)执行以下操作:

@IBOutlet weak var art_title: UILabel!
var viaSegue = "artwork title should be here"

override func viewDidLoad() {
    super.viewDidLoad()
    art_title.text = viaSegue

but I don't know how to reference it correctly for via Segue to take the value of "title". 但我不知道如何通过Segue正确引用它来取得“标题”的价值。

ENTIRE FILE: 完整文件:

import UIKit
import MapKit
import CoreLocation

class ViewController: UIViewController,         MKMapViewDelegate,CLLocationManagerDelegate {

@IBOutlet weak var MapView: MKMapView!
let manager = CLLocationManager()
var artworkPin = Artwork!


func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    //let location = locations[0]


    //let span:MKCoordinateSpan = MKCoordinateSpanMake(0.02, 0.02)

    //let myLocation:CLLocationCoordinate2D = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)


}
override func viewDidLoad() {
    super.viewDidLoad()

    // tracking user's location
    manager.delegate = self
    manager.desiredAccuracy = kCLLocationAccuracyBest
    manager.requestWhenInUseAuthorization()
    manager.startUpdatingLocation()

    // Setting up Map
    let distanceSpan:CLLocationDegrees = 2000
    MapView.setRegion(MKCoordinateRegionMakeWithDistance(CLLocationCoordinate2DMake(-39.0556253, 174.0752278), distanceSpan, distanceSpan), animated: true)
    MapView.showsUserLocation = true
    MapView.delegate = self

    // artwork on map
    let windwandcoord: CLLocationCoordinate2D = CLLocationCoordinate2DMake(-39.055961,174.072288)
    artworkPin = Artwork(title:"Wind Wand",locationName:"Majestic",discipline:"Statue",
                             coordinate:windwandcoord)
    MapView.addAnnotation(artworkPin)
}


func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?
{
    if annotation is MKUserLocation {return nil}

    let reuseId = "pin"

    var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) as? MKPinAnnotationView
    if pinView == nil {
        pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
        pinView!.canShowCallout = true
        pinView!.animatesDrop = true
        pinView!.calloutOffset = CGPoint(x: -5, y: 5)
        let calloutButton = UIButton(type: .detailDisclosure)
        pinView!.rightCalloutAccessoryView = calloutButton
        pinView!.sizeToFit()
    }
    else {
        pinView!.annotation = annotation
    }


    return pinView
}



func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {
    if control == view.rightCalloutAccessoryView {
        performSegue(withIdentifier: "no", sender:self)
    }
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let ViewTwo = segue.destination as! ViewTwo
    ViewTwo.artworkPin = self.artworkPin
}


}

Thanks for your help 谢谢你的帮助

In your vc B add: 在你的vc B中添加:

var artworkpin: Artwork!

In your vc A: 在你的vc A:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let vcB = segue.destinationViewController as! vcB
        vcB.artworkpin = self.artworkpin
    }

after that in vc B viewDidLoad you can get the title by art_title.text = artworkpin.title 之后在vc B viewDidLoad你可以通过art_title.text = artworkpin.title获得标题

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM