Skip to content

Instantly share code, notes, and snippets.

Avatar
:octocat:
Refactoring

Koze Koze

:octocat:
Refactoring
View GitHub Profile
@Koze
Koze / UnicodePrecomposedCharacterEquatable.swift
Last active Sep 17, 2020
The test for Equatable of precomposed characters of Unicode.
View UnicodePrecomposedCharacterEquatable.swift
func unicodeCodePointsToString(_ codePoints :[UInt32]) -> String {
let unicodeScalars = codePoints.compactMap { Unicode.Scalar($0) }
let characters = unicodeScalars.map { Character($0) }
let string = String(characters)
return string
}
// HIRAGANA LETTER GA
let ga = unicodeCodePointsToString([0x304C])
// HIRAGANA LETTER KA, COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
@Koze
Koze / JapaneseFontProblem.swift
Last active May 9, 2020
Japanese font without Japanese character causes the clip at the bottom. The final workaround with extension.
View JapaneseFontProblem.swift
//
// SmapleView.swift
// JapaneseFontCropped
//
// Created by Kazuma Koze on 2020/05/08.
// Copyright © 2020 Climb App. All rights reserved.
//
/**
Copyright 2020 Kazuma Koze
@Koze
Koze / JapaneseFontProblem.swift
Last active May 8, 2020
Japanese font without Japanese character causes the clip at the bottom. The final workaround.
View JapaneseFontProblem.swift
import SwiftUI
struct SmapleView: View {
let ctFont = CTFontCreateWithName("HiraginoSans-W3" as CFString, 50, nil)
var ctFontDescender: CGFloat {
CTFontGetDescent(ctFont)
}
let borderColor = Color(.systemBlue)
@Koze
Koze / JapaneseFontProblem.swift
Created May 8, 2020
Japanese font without Japanese character causes the clip at the bottom. A refactored quick workaround.
View JapaneseFontProblem.swift
import SwiftUI
struct SmapleView: View {
let ctFont = CTFontCreateWithName("HiraginoSans-W3" as CFString, 50, nil)
var ctFontDescender: CGFloat {
CTFontGetDescent(ctFont)
}
let borderColor = Color(.systemBlue)
@Koze
Koze / JapaneseFontProblem.swift
Created May 8, 2020
Japanese font without Japanese character causes the clip at the bottom. A quick workaround.
View JapaneseFontProblem.swift
import SwiftUI
struct SmapleView: View {
let font = Font.custom("HiraginoSans-W3", size: 50)
let uiFont = UIFont(name: "HiraginoSans-W3", size: 50)!
let borderColor = Color(.systemBlue)
var body: some View {
HStack(spacing: 10) {
@Koze
Koze / JapaneseFontProblem.swift
Created May 8, 2020
Japanese font without Japanese character causes the clip at the bottom. A workaround that doesn't work.
View JapaneseFontProblem.swift
import SwiftUI
struct SmapleView: View {
let font = Font.custom("HiraginoSans-W3", size: 50)
let borderColor = Color(.systemBlue)
var body: some View {
HStack(spacing: 10) {
Text("Copy")
@Koze
Koze / JapaneseFontProblem.swift
Last active May 8, 2020
Japanese font without Japanese character causes the clip at the bottom.
View JapaneseFontProblem.swift
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")
View CKRecord+KeyPath.swift
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 Mar 15, 2020
Type-safe CKRecord with dynamicMemberLookup
View CKRecord+DynamicMemberLookup.swift
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 Mar 15, 2020
Type-safe CKRecord extension by Objective-C keyPath.
View CKRecord+KeyPath.swift
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
}