With @inlinable
, Swift compiler is able to optimize the entire for in
loop away, which is not possible without it.
View PinEdges.swift
public protocol LayoutItem { // `UIView`, `UILayoutGuide` | |
var superview: UIView? { get } | |
} | |
extension UIView: LayoutItem {} | |
extension UILayoutGuide: LayoutItem { | |
public var superview: UIView? { owningView } | |
} | |
public struct Alignment { |
View StateObject.swift
// Version 1: Using initializer directly | |
struct ContentView: View { | |
@State var count = 0 | |
let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect() | |
var body: some View { | |
VStack { | |
Text("container: \(count)") | |
.padding() |
View tbd
asd |
View Notes.md
View Example.swift
public struct ImageView: View { | |
@ObservedObject var image: FetchImage | |
public var body: some View { | |
ZStack { | |
Rectangle().fill(Color.gray) | |
image.view? | |
.resizable() | |
.aspectRatio(contentMode: .fill) | |
} |
View Future+Combine.swift
import Future | |
import Combine | |
public extension Future { | |
var publisher: Combine.Future<Value, Error> { | |
Combine.Future { fulfill in | |
self.on(success: { | |
fulfill(.success($0)) | |
}, failure: { | |
fulfill(.failure($0)) |
View SearchView.swift
struct SearchView: View { | |
@ObservedObject var viewModel: SearchViewModel | |
var body: some View { | |
VStack { | |
TextField("Search", text: $viewModel.query) | |
List(viewModel.songs) { | |
Text($0.name) | |
} | |
} |
View _DynamicProperty.swift
// A speculative _ViewRendererHost implementation which uses Mirror (Swift reflection) to find all | |
// of the dynamic properties (`DynamicProperty`) associated with a given view (`View`), observe | |
// the changes to these properties and automatically refresh the view whenever any of these property change. | |
protocol _DynamicProperty { | |
var objectWillChange: AnyPublisher<Void, Never> { get } | |
} | |
extension ObservedObject: _DynamicProperty { | |
var objectWillChange: AnyPublisher<Void, Never> { |
NewerOlder