Skip to content

Instantly share code, notes, and snippets.

Avatar
🐭

Wei Wang onevcat

🐭
View GitHub Profile
View Runtime.swift
protocol P: AnyObject { }
class A: P {}
Runtime.classes(conformTo: P.Type.self) // [MyApp.A]
class Runtime {
public static func allClasses() -> [AnyClass] {
let numberOfClasses = Int(objc_getClassList(nil, 0))
if numberOfClasses > 0 {
@onevcat
onevcat / Default.swift
Created Nov 10, 2020
Sample code of using Default to decode a property to the default value
View Default.swift
import UIKit
protocol DefaultValue {
associatedtype Value: Decodable
static var defaultValue: Value { get }
}
@propertyWrapper
struct Default<T: DefaultValue> {
var wrappedValue: T.Value
View TrafficLight.swift
//: A UIKit based Playground for presenting user interface
import UIKit
import PlaygroundSupport
public protocol TrafficLightOption {
associatedtype Value
/// 默认的选项值
static var defaultValue: Value { get }
View ZipAll.swift
import Combine
import Foundation
extension Publishers {
struct ZipAll<Collection: Swift.Collection>: Publisher
where Collection.Element: Publisher
{
typealias Output = [Collection.Element.Output]
typealias Failure = Collection.Element.Failure
View sample-file.md

用户体验和布局进阶

PokeMaster app 现在已经是一个具有完整功能的 SwiftUI app 了。麻雀虽小,五脏俱全,在这个示例 app 里,我们涉及到了一个一般性的 iOS app 所需要的大部分内容:

  • 如何构建内容展示的列表
  • 如何构建用户交互的表单
  • 如何进行网络请求并把内容展示出来
  • 如何响应用户的手势
  • 如何在不同页面之间进行导航
  • 以及,如何通过一定的架构将所有上面的内容整合起来
View cabal-install.rb
class CabalInstall < Formula
desc "Command-line interface for Cabal and Hackage"
homepage "https://www.haskell.org/cabal/"
url "https://hackage.haskell.org/package/cabal-install-2.4.1.0/cabal-install-2.4.1.0.tar.gz"
sha256 "69bcb2b54a064982412e1587c3c5c1b4fada3344b41b568aab25730034cb21ad"
head "https://github.com/haskell/cabal.git", :branch => "2.4"
bottle do
cellar :any_skip_relocation
sha256 "4c9ad9914b483ffb64f4449bd6446cb8c0ddfeeff42eddde9137884af3471825" => :mojave
View ResumableSink.swift
import Foundation
import Combine
protocol Resumable {
func resume()
}
extension Subscribers {
class ResumableSink<Input, Failure: Error>: Subscriber, Cancellable, Resumable {
let receiveCompletion: (Subscribers.Completion<Failure>) -> Void
View BrokenPageVC.swift
final class ViewController: UIPageViewController {
class Inner: UIViewController {
var color: UIColor!
var name: String!
override func viewDidLoad() {
view.backgroundColor = color
}
View PrimitiveButtonStyle.swift
struct ContentView: View {
let foo: Bool = true
var body: some View {
Button(action: {
print("miao")
}) {
Text("Click Me")
}.buttonStyle(MyButtonStyle())
}
}
View ToggleDemo.swift
import SwiftUI
class Foo: ObservableObject {
@Published var toggle = false
}
struct ContentView: View {
@EnvironmentObject var foo: Foo
var body: some View {
VStack {