(So we don't have to use id: .self)
extension ForEach where Data.Element: Hashable, ID == Data.Element, Content: View {
    init(values: Data, content: @escaping (Data.Element) -> Content) {
(So we don't have to use id: .self)
extension ForEach where Data.Element: Hashable, ID == Data.Element, Content: View {
    init(values: Data, content: @escaping (Data.Element) -> Content) {
Static factory methods in Swift
| // | |
| // KeyboardAwareModifier.swift | |
| // KeyboardTest | |
| // | |
| import SwiftUI | |
| import Combine | |
| struct KeyboardAwareModifier: ViewModifier { | |
| @State private var keyboardHeight: CGFloat = 0 | 
If you look at a version like 1.5.3, then the 1 is considered the major number, the 5 is considered the minor number, and the 3 is considered the patch number.
If developers follow SemVer correctly, then they should:
//
//  ContentView.swift
//  ResultTypeTest
//
//  Created by Michalski (US), James B on 12/12/19.
//  Copyright © 2019 Perlguy, Inc. All rights reserved.
func getDocumentsDirectory() -> URL {
    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    return paths[0]
}
This won't work because the @State property wrapper doesn't actually modify the value directly...
    @State private var blurAmount: CGFloat = 0 {
        didSet {
 print("New value is \(blurAmount)")