我使用词典键作为datasource
的{{1}}。字典的类型是tableview
。
问题是从[String: [Question]]
返回的数组不是排序数组,但是我希望它被排序。创建一个函数来对键数组进行排序可能是一个解决方案,但它对我来说还不够,因为每次访问键时都必须调用该函数。
我的一个想法是,为了扩展词典,就像这样,
Dictionary.keys
但是它告诉我“Type is expression是模糊的,没有更多的上下文”。任何人都可以告诉我这是否可能?
答案 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
。