Skip to content

Instantly share code, notes, and snippets.

@ericleiyang
Created September 12, 2020 06:35
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ericleiyang/14a335601f5046a02e73a0756318a4e9 to your computer and use it in GitHub Desktop.
Save ericleiyang/14a335601f5046a02e73a0756318a4e9 to your computer and use it in GitHub Desktop.
import UIKit
public struct CollectionViewCellProvider {
@available(iOS 13, *)
public static func compositionalCell() {
// compositional collection view cell
}
public static func collectionCell() -> UICollectionViewCell {
// collection view cell
return UICollectionViewCell()
}
}
class ParentViewController: UIViewController {
override func viewDidLoad() {
presentViewController() // No Xcode complains!
}
@discardableResult
func presentViewController() -> UIViewController {
return UIViewController()
}
}
@dynamicCallable
struct RandomProvider {
func dynamicallyCall(withArguments args: [Int]) -> Double {
let numberOfZeroes = Double(args[0])
let maximum = pow(10, numberOfZeroes)
return Double.random(in: 0...maximum)
}
func dynamicallyCall(withKeywordArguments args: KeyValuePairs<String, Int>) -> Double {
let numberOfZeroes = Double(args.first?.value ?? 0)
let maximum = pow(10, numberOfZeroes)
return Double.random(in: 0...maximum)
}
}
let random = RandomProvider()
print(random(1)) // 8.15946134247
print(random(a:1)) // 5.14551692644
@dynamicMemberLookup
struct User {
subscript(dynamicMember member: String) -> String {
let properties = ["firstname": "Bob", "lastname": "Dylan"]
return properties[member, default: ""]
}
}
let user = User()
print(user.firstname) // Bob
print(user.lastname) // Dylan
@main
struct Repeat: ParsableCommand {
@Argument(help: "The phrase to repeat.")
var phrase: String
mutating func run() throws {
for _ in 1...5 {
print(phrase)
}
}
}
class Service {
var closure: (() -> Void)?
func storageExample(with completion: @escaping (() -> Void)) {
closure = completion // error: assigning non-escaping parameter 'completion' to an @escaping closure
}
func asyncExample(with completion: @escaping (() -> Void)) {
DispatchQueue.global().async { // error: escaping closure captures non-escaping parameter 'completion'
completion()
}
}
func runAsyncTask(completion: @escaping (() -> Void)) {
DispatchQueue.global().async {
completion()
}
}
}
enum UILayoutConstraintAxis: Int {
case UILayoutConstraintAxisHorizontal = 0
case UILayoutConstraintAxisVertical = 1
case UILayoutConstraintAxisZ = 2
}
let axis = UILayoutConstraintAxis.UILayoutConstraintAxisHorizontal
switch axis {
case .UILayoutConstraintAxisHorizontal:
print("")
case .UILayoutConstraintAxisVertical:
print("")
@unknown default:
print("")
}
@propertyWrapper
struct WhitespaceTrimmable {
private(set) var value: String = ""
var wrappedValue: String {
get { value }
set { value = newValue.trimmingCharacters(in: .whitespacesAndNewlines) }
}
init(wrappedValue: String) {
self.wrappedValue = wrappedValue
}
}
struct Service {
@WhitespaceTrimmable(wrappedValue: "Default title") var title: String
func accessTitle() {
print("title: \(_title)") //Default title
}
}
var temp = Service()
print(temp.title)
temp.accessTitle()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment