diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8191f6b..27d1cce 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,7 +24,7 @@ jobs: scheme: [MapLibreSwiftUI-Package] destination: [ # TODO: Add more destinations (snapshot testing is the problem) - "platform=iOS Simulator,name=iPhone 16,OS=18.1", + "platform=iOS Simulator,name=iPhone 16,OS=18.6", # 'platform=watchOS Simulator,name=Apple Watch Ultra 2 (49mm)', # "platform=iOS Simulator,name=iPad (10th generation),OS=16.4", # "platform=iOS Simulator,name=iPhone 15,OS=17.2", diff --git a/Sources/MapLibreSwiftDSL/Style Layers/Background.swift b/Sources/MapLibreSwiftDSL/Style Layers/Background.swift index 0f9e104..e5d4ec5 100644 --- a/Sources/MapLibreSwiftDSL/Style Layers/Background.swift +++ b/Sources/MapLibreSwiftDSL/Style Layers/Background.swift @@ -9,8 +9,8 @@ public struct BackgroundLayer: StyleLayer { public let identifier: String public var insertionPosition: LayerInsertionPosition = .below(.all) public var isVisible: Bool = true - public var maximumZoomLevel: Float? = nil - public var minimumZoomLevel: Float? = nil + public var maximumZoomLevel: Float? + public var minimumZoomLevel: Float? public init(identifier: String) { self.identifier = identifier diff --git a/Sources/MapLibreSwiftDSL/Style Layers/Circle.swift b/Sources/MapLibreSwiftDSL/Style Layers/Circle.swift index 6026212..9e6794a 100644 --- a/Sources/MapLibreSwiftDSL/Style Layers/Circle.swift +++ b/Sources/MapLibreSwiftDSL/Style Layers/Circle.swift @@ -12,8 +12,8 @@ public struct CircleStyleLayer: SourceBoundVectorStyleLayerDefinition { public let sourceLayerIdentifier: String? public var insertionPosition: LayerInsertionPosition = .above(.all) public var isVisible: Bool = true - public var maximumZoomLevel: Float? = nil - public var minimumZoomLevel: Float? = nil + public var maximumZoomLevel: Float? + public var minimumZoomLevel: Float? public var source: StyleLayerSource public var predicate: NSPredicate? diff --git a/Sources/MapLibreSwiftDSL/Style Layers/FillStyleLayer.swift b/Sources/MapLibreSwiftDSL/Style Layers/FillStyleLayer.swift index f610c27..c6b9a47 100644 --- a/Sources/MapLibreSwiftDSL/Style Layers/FillStyleLayer.swift +++ b/Sources/MapLibreSwiftDSL/Style Layers/FillStyleLayer.swift @@ -12,8 +12,8 @@ public struct FillStyleLayer: SourceBoundVectorStyleLayerDefinition { public let sourceLayerIdentifier: String? public var insertionPosition: LayerInsertionPosition = .above(.all) public var isVisible: Bool = true - public var maximumZoomLevel: Float? = nil - public var minimumZoomLevel: Float? = nil + public var maximumZoomLevel: Float? + public var minimumZoomLevel: Float? public var source: StyleLayerSource public var predicate: NSPredicate? diff --git a/Sources/MapLibreSwiftDSL/Style Layers/Line.swift b/Sources/MapLibreSwiftDSL/Style Layers/Line.swift index 6e50dfd..5286c8d 100644 --- a/Sources/MapLibreSwiftDSL/Style Layers/Line.swift +++ b/Sources/MapLibreSwiftDSL/Style Layers/Line.swift @@ -14,8 +14,8 @@ public struct LineStyleLayer: SourceBoundVectorStyleLayerDefinition { public let sourceLayerIdentifier: String? public var insertionPosition: LayerInsertionPosition = .above(.all) public var isVisible: Bool = true - public var maximumZoomLevel: Float? = nil - public var minimumZoomLevel: Float? = nil + public var maximumZoomLevel: Float? + public var minimumZoomLevel: Float? public var source: StyleLayerSource public var predicate: NSPredicate? diff --git a/Sources/MapLibreSwiftDSL/Style Layers/StyleLayerCollection.swift b/Sources/MapLibreSwiftDSL/Style Layers/StyleLayerCollection.swift index bd79654..8a1d10b 100644 --- a/Sources/MapLibreSwiftDSL/Style Layers/StyleLayerCollection.swift +++ b/Sources/MapLibreSwiftDSL/Style Layers/StyleLayerCollection.swift @@ -3,3 +3,17 @@ import Foundation public protocol StyleLayerCollection { @MapViewContentBuilder var layers: [StyleLayerDefinition] { get } } + +/// Enables more natural "Builder" return value (more like SwiftUI's View) +/// +/// Instead of: +/// ``` +/// @MapViewContentBuilder mapContent: @escaping () -> [StyleLayerDefinition] +/// ``` +/// You can do: +/// ``` +/// @MapViewContentBuilder mapContent: @escaping () -> some StyleLayerCollection +/// ``` +extension [StyleLayerDefinition]: StyleLayerCollection { + public var layers: [StyleLayerDefinition] { self } +} diff --git a/Sources/MapLibreSwiftDSL/Style Layers/Symbol.swift b/Sources/MapLibreSwiftDSL/Style Layers/Symbol.swift index 779753a..f898780 100644 --- a/Sources/MapLibreSwiftDSL/Style Layers/Symbol.swift +++ b/Sources/MapLibreSwiftDSL/Style Layers/Symbol.swift @@ -29,8 +29,8 @@ public struct SymbolStyleLayer: SourceBoundVectorStyleLayerDefinition { public let sourceLayerIdentifier: String? public var insertionPosition: LayerInsertionPosition = .above(.all) public var isVisible: Bool = true - public var maximumZoomLevel: Float? = nil - public var minimumZoomLevel: Float? = nil + public var maximumZoomLevel: Float? + public var minimumZoomLevel: Float? public var source: StyleLayerSource public var predicate: NSPredicate? diff --git a/Sources/MapLibreSwiftUI/Examples/Camera.swift b/Sources/MapLibreSwiftUI/Examples/Camera.swift index a7f0f11..10bb005 100644 --- a/Sources/MapLibreSwiftUI/Examples/Camera.swift +++ b/Sources/MapLibreSwiftUI/Examples/Camera.swift @@ -5,8 +5,8 @@ struct CameraDirectManipulationPreview: View { @State private var camera = MapViewCamera.center(switzerland, zoom: 4) let styleURL: URL - var onStyleLoaded: (() -> Void)? = nil - var targetCameraAfterDelay: MapViewCamera? = nil + var onStyleLoaded: (() -> Void)? + var targetCameraAfterDelay: MapViewCamera? var body: some View { MapView(styleURL: styleURL, camera: $camera) diff --git a/Sources/MapLibreSwiftUI/MapView.swift b/Sources/MapLibreSwiftUI/MapView.swift index 7fb338b..70f5485 100644 --- a/Sources/MapLibreSwiftUI/MapView.swift +++ b/Sources/MapLibreSwiftUI/MapView.swift @@ -58,12 +58,12 @@ public struct MapView: UIViewControllerRepresentab camera: Binding = .constant(.default()), locationManager: MLNLocationManager? = nil, activity: MapActivity = .standard, - @MapViewContentBuilder _ makeMapContent: () -> [StyleLayerDefinition] = { [] } + @MapViewContentBuilder _ makeMapContent: () -> some StyleLayerCollection = { [] } ) { self.makeViewController = makeViewController styleSource = .url(styleURL) _camera = camera - userLayers = makeMapContent() + userLayers = makeMapContent().layers self.locationManager = locationManager self.activity = activity }