簡體   English   中英

swift3將數組放入側面閉合

[英]swift3 get the array in side closure

我想獲得最終結果joblist數組以使用外部閉包。 因為我想使用Joblist數組設置一個tableview。

let geoCoder = CLGeocoder()
geoCoder.geocodeAddressString(address) { (placemarks, error) in
    if error == nil && (placemarks?.count)! > 0 {

        let location2 = placemarks?[0].location

        if let location1 = self.locationManager?.location {
            let distanceInMeters = location1.distance(from: location2!)
            let IntDis = Int(distanceInMeters)
            //print(IntDis)

            if IntDis < 40000 {

                //print(address)

                if let activityid       = infoDictionary["ActivityID"] {self.newJob.ActivityID=activityid}
                if let companyname      = infoDictionary["CompanyName"] {self.newJob.CompanyName=companyname}
                if let quantity         = infoDictionary["Quantity"] {self.newJob.Quantity=quantity}
                if let coupontitle      = infoDictionary["Title"] {self.newJob.CouponTitle=coupontitle}
                if let couponterms      = infoDictionary["Terms"] {self.newJob.CouponTerms=couponterms}
                if let expirdate        = infoDictionary["ExpirDate"] {self.newJob.ExpirDate=expirdate}
                if let contactperson    = infoDictionary["ContactPerson"] {self.newJob.ContactPerson=contactperson}
                if let tel              = infoDictionary["TEL"] {self.newJob.TEL=tel}

                self.joblist.append(self.newJob)
                //print(self.joblist)
                //self.tableView.reloadData()

            }
        }
    }
}

您可以通過兩種方式執行此操作:

  1. 使joblist變量全球化,所以它可以從多個地方進行訪問
  2. 使用回調,該回調在傳遞先前收集的數據時調用新函數。 當原始的“數據獲取”過程是具有延遲的網絡任務時,這尤其有用。

全局變量:

let geoCoder = CLGeocoder()
var jobList = [AnyClass]() //make a global array
geoCoder.geocodeAddressString(address) { (placemarks, error) in
   ...filtering code ...
   joblist.append(self.newJob)
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
   cell.textLabel = jobList[indexPath.row].ActivityID //or something else with the data 
}

使用回調(不會傳遞給下一個函數的簡單版本):

geoCoder.geocodeAddressString(address) { (placemarks, error) in
   ...filtering code ...
   doTableViewStuff(data: joblist)
}

func doTableViewStuff(data: [Jobs]) { //or whatever type of data
   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
       let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
       cell.textLabel = data[indexPath.row].ActivityID //or something else with the data 
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM