Skip to content

Instantly share code, notes, and snippets.

View Koze's full-sized avatar
:octocat:
Refactoring

Koze Koze

:octocat:
Refactoring
View GitHub Profile
@Koze
Koze / JapaneseFontProblem.swift
Last active May 8, 2020 22:24
Japanese font without Japanese character causes the clip at the bottom.
import SwiftUI
struct SmapleView: View {
let font = Font.custom("HiraginoSans-W3", size: 50)
let borderColor = Color(.systemBlue)
var body: some View {
VStack(spacing: 10) {
Text("Copy")
extension CKRecord {
public subscript<Root, Value: CKRecordValueProtocol>(keyPath keyPath: WritableKeyPath<Root, Value>) -> Value? {
get {
let key = NSExpression(forKeyPath: keyPath).keyPath
return self[key]
}
set {
let key = NSExpression(forKeyPath: keyPath).keyPath
self[key] = newValue
}
@Koze
Koze / CKRecord+DynamicMemberLookup.swift
Created March 15, 2020 12:05
Type-safe CKRecord with dynamicMemberLookup
extension CKRecord {
subscript<Root, Value: CKRecordValueProtocol>(dynamicMember keyPath: WritableKeyPath<Root, Value>) -> Value? {
get {
let key = NSExpression(forKeyPath: keyPath).keyPath
return self[key]
}
set {
let key = NSExpression(forKeyPath: keyPath).keyPath
// Fatal error: Could not extract a String from KeyPath Swift.ReferenceWritableKeyPath
self[key] = newValue
@Koze
Koze / CKRecord+KeyPath.swift
Created March 15, 2020 09:14
Type-safe CKRecord extension by Objective-C keyPath.
extension CKRecord {
public subscript<Root, Value: CKRecordValueProtocol>(keyPath keyPath: WritableKeyPath<Root, Value>) -> Value? {
get {
let key = NSExpression(forKeyPath: keyPath).keyPath
return self[key]
}
set {
let key = NSExpression(forKeyPath: keyPath).keyPath
self[key] = newValue
}
@Koze
Koze / CKRecord+RawRepresentable.swift
Last active March 15, 2020 09:13
A little type-safe CKRecord extension to prevent typo.
extension CKRecord {
subscript<T: RawRepresentable>(key: T) -> CKRecordValueProtocol? where T.RawValue == CKRecord.FieldKey {
get {
return self[key.rawValue]
}
set {
self[key.rawValue] = newValue
}
}
}
@Koze
Koze / TableViewCell.swift
Last active July 27, 2021 13:46
Adding SwiftUI preview implementation to existing view class
//
// TableViewCell.swift
// iOS12App
//
// Created by Kazuma Koze on 2020/03/05.
// Copyright © 2020 Climb App. All rights reserved.
//
import UIKit
import SwiftUI
@Koze
Koze / TableViewCell.swift
Last active March 6, 2020 05:40
Accessible TableViewCell like system UITableViewCell
//
// TableViewCell.swift
// iOS12App
//
// Created by Kazuma Koze on 2020/03/05.
// Copyright © 2020 Climb App. All rights reserved.
//
import UIKit
@Koze
Koze / TableViewCellPreview.swift
Last active March 5, 2020 19:24
Using SwiftUI preview with UIView
//
// TableViewCellPreview.swift
// iOS12App
//
// Created by Kazuma Koze on 2020/03/05.
// Copyright © 2020 Climb App. All rights reserved.
//
import SwiftUI
@Koze
Koze / AVSpeechSynthesisVoice+iOS13Workaround.swift
Created October 27, 2019 17:46
Workaround for that AVSpeechSynthesisVoice currentLanguageCode returns application language.
extension AVSpeechSynthesisVoice {
class func currentLanguageCodeWorkaround() -> String {
if #available(iOS 13, *) {
for preferredLanguage in Locale.preferredLanguages {
let locale = Locale(identifier: preferredLanguage)
if let languageCode = locale.languageCode {
var voiceLanguage = languageCode
if let regionCode = locale.regionCode {
@Koze
Koze / AVSpeechSynthesisVoice+iOS13Workaround.swift
Last active October 27, 2019 17:47
Workaround for that AVSpeechSynthesisVoice currentLanguageCode returns application language.
extension AVSpeechSynthesisVoice {
private static let availableLanguages: Set<String> = Set(AVSpeechSynthesisVoice.speechVoices().map{ $0.language })
class func currentLanguageCodeWorkaround() -> String {
if #available(iOS 13, *) {
if let preferredLanguage = Locale.preferredLanguages.first {
let locale = Locale(identifier: preferredLanguage)
if let languageCode = locale.languageCode,