Skip to content

Instantly share code, notes, and snippets.

View keremk's full-sized avatar

Kerem Karatal keremk

View GitHub Profile
func fetchPreviewData<T: Decodable>(previewFile: String, fetcher: () -> T) -> T {
#if PREVIEW
return loadPreviewData(previewFile)
#else
return fetcher()
#endif
}
#if PREVIEW
// Below is directly "borrowed" from https://developer.apple.com/tutorials/swiftui/composing-complex-interfaces
import Foundation
import Combine
final class MovieCollection: ObservableObject {
@Published var movieResponse: MovieResponse? = nil
...
func fetchMovies() -> [Movie] {
let response: MovieResponse? = fetchPreviewData(previewFile: "movies.json", fetcher: fetchResponse)
import Foundation
import UIKit
func fetchPreviewImage(imageName: String, size: ImageSizeable, fetcher: () -> CGImage?) -> CGImage? {
#if PREVIEW
return loadPreviewImage(name: imageName, size: size)
#else
return fetcher()
#endif
}
final class ImageResolver: ObservableObject {
@Published var image: CGImage? = nil
...
func fetchImage() -> CGImage? {
return fetchPreviewImage(imageName: name, size: size, fetcher: fetch)
}
private func fetch() -> CGImage? {
import SwiftUI
struct MoviePoster: View {
let imageName: String
let placeholder = UIImage(named: "placeholder.jpg")!.cgImage!
@ObservedObject private var resolver: ImageResolver
init(imageName: String) {
self.imageName = imageName
func fetchPreviewImage(imageName: String, size: ImageSizeable, fetcher: () -> CGImage?) -> CGImage? {
#if PREVIEW
return loadPreviewImage(name: imageName, size: size)
#else
return fetcher()
#endif
}
{
"page": 2,
"total_results": 10000,
"total_pages": 500,
"results": [
{
"popularity": 74.704,
"vote_count": 9537,
"video": false,
"poster_path": "\/kOVEVeg59E0wsnXmF9nrh6OmWII.jpg",
struct MovieRow: View {
var movie: Movie
var body: some View {
HStack {
MoviePoster(imageName: movie.posterName)
.frame(width: 97.5, height: 146.25, alignment: Alignment.center)
VStack(alignment: .leading) {
...
#if DEBUG
struct MovieList_Previews: PreviewProvider {
static var previews: some View {
let movies = MovieCollection().fetchMovies()
let selectMovies = [movies[0], movies[2], movies[3]]
return MovieList(movies: selectMovies)
.previewLayout(.sizeThatFits)
.environmentObject(EnvironmentConfig(mode: .PreviewMode))
}
}
@keremk
keremk / Date.playground
Created June 24, 2014 06:56
Swift Date Helpers
// Playground - noun: a place where people can play
import UIKit
var str = "Hello, playground"
enum TimeIntervalUnit {
case Seconds, Minutes, Hours, Days, Months, Years
func dateComponents(interval: Int) -> NSDateComponents {