Swift Dictionary排序键扩展

时间:2016-07-04 22:32:20

标签: ios swift dictionary swift-dictionary

我使用词典键作为datasource的{​​{1}}。字典的类型是tableview

问题是从[String: [Question]]返回的数组不是排序数组,但是我希望它被排序。创建一个函数来对键数组进行排序可能是一个解决方案,但它对我来说还不够,因为每次访问键时都必须调用该函数。

我的一个想法是,为了扩展词典,就像这样,

Dictionary.keys

但是它告诉我“Type is expression是模糊的,没有更多的上下文”。任何人都可以告诉我这是否可能?

1 个答案:

答案 0 :(得分:2)

import Foundation
import UIKit
import MapKit

class MyController: UIViewController, MKMapViewDelegate {
    @IBOutlet weak var mapView: MKMapView!
    var overlay:MKTileOverlay = MKTileOverlay(URLTemplate: "https://services.arcgisonline.com/ArcGIS/rest/services/USA_Topo_Maps/MapServer/tile/{z}/{y}/{x}.jpg");

override func viewDidLoad() {
    mapView.delegate = self
    mapView.showsUserLocation = true;
    overlay.maximumZ = 15;
    overlay.minimumZ = 12;
    overlay.canReplaceMapContent = true
    mapView.addOverlay(overlay)

    var points: [CLLocationCoordinate2D] = [CLLocationCoordinate2D]()

    points.append(CLLocationCoordinate2D(latitude: 40.7608, longitude: -111.8910));
    points.append(CLLocationCoordinate2D(latitude: 40.8894, longitude: -111.8808));

    var polyline = MKPolyline(coordinates: &points, count: points.count)
    mapView.addOverlay(polyline)
    let region = MKCoordinateRegion(center: points[0], span: MKCoordinateSpan(latitudeDelta:  0.05, longitudeDelta:  0.05))
    mapView.setRegion(region, animated: false)
}


func mapView(mapView: MKMapView!, rendererForOverlay overlay: MKOverlay!) -> MKOverlayRenderer! {
    if overlay is MKPolyline {
        var polylineRenderer = MKPolylineRenderer(overlay: overlay)
        polylineRenderer.strokeColor = UIColor.blueColor()
        polylineRenderer.lineWidth = 5
        return polylineRenderer
    } else if (overlay is MKTileOverlay) {
        let renderr = MKTileOverlayRenderer(overlay: overlay)
        return renderr
    }

    return nil
}
}
  • 要使用extension Dictionary where Key: Comparable { var sortedKeys: [Key] { get { return keys.sort{ $0 > $1 } } } } >必须为Key。 (这个排序是你想要的?你使用Comparable升序。)

  • 此扩展程序适用于<,其中Dictionary可能不是Key

  • String中,keys.sort$0的类型为$1,而不是Key