Skip to content

Instantly share code, notes, and snippets.

@maakcode
Created December 16, 2019 06:50
Show Gist options
  • Save maakcode/110216c1af4afe7e203b956bece0dd27 to your computer and use it in GitHub Desktop.
Save maakcode/110216c1af4afe7e203b956bece0dd27 to your computer and use it in GitHub Desktop.
Swift Gists
import Cocoa
/*
는/은, 가/이, 야/아, 와/과, 를/을, 다/이다, 으로/로
*/
extension String {
struct KoreanSound {
static let firsts = ["ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"]
static let middles = [ "ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ" ]
static let ends = [ "", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ" ]
}
struct KoreanLetter {
var first: String
var middle: String
var end: String
}
func endLetter() -> KoreanLetter {
guard let testScalar = self.unicodeScalars.last?.value, let baseScalar = "가".unicodeScalars.last?.value, testScalar > baseScalar else { return KoreanLetter(first: KoreanSound.firsts.first!, middle: KoreanSound.middles.first!, end: KoreanSound.ends.first!) }
let value = Int(testScalar - baseScalar)
let endIndex = value % 28
let middleIndex = ((value - endIndex)/28)%21
let firstIndex = ((value - endIndex)/28 - middleIndex)/21
return KoreanLetter(first: KoreanSound.firsts[firstIndex], middle: KoreanSound.middles[middleIndex], end: KoreanSound.ends[endIndex])
}
var 는: String {
return self + (endLetter().end == "" ? "는" : "은")
}
var 가: String {
return self + (endLetter().end == "" ? "가" : "이")
}
var 야: String {
return self + (endLetter().end == "" ? "야" : "아")
}
var 와: String {
return self + (endLetter().end == "" ? "와" : "과")
}
var 를: String {
return self + (endLetter().end == "" ? "를" : "을")
}
var 다: String {
return self + (endLetter().end == "" ? "다" : "이다")
}
var 로: String {
let end = endLetter().end
return self + (end != "" && end != "ㄹ" ? "으로" : "로")
}
}
let name1 = "사과"
let name2 = "귤"
let name3 = "밥"
print("\(name1.는) 맛있다") // 사과는 맛있다
print("\(name2.는) 맛있다") // 귤은 맛있다
print("\(name3.는) 맛있다") // 밥은 맛있다
print("\(name1.가) 맛있다") // 사과가 맛있다
print("\(name2.가) 맛있다") // 귤이 맛있다
print("\(name3.가) 맛있다") // 밥이 맛있다
print("\(name1.야) 어디있니") // 사과야 어디있니
print("\(name2.야) 어디있니") // 귤아 어디있니
print("\(name3.야) 어디있니") // 밥아 어디있니
print("\(name1.를) 먹었다") // 사과를 먹었다
print("\(name2.를) 먹었다") // 귤을 먹었다
print("\(name3.를) 먹었다") // 밥을 먹었다
print("\(name1.다)") // 사과다
print("\(name2.다)") // 귤이다
print("\(name3.다)") // 밥이다
print("\(name1.로) 맞았다") // 사과로 맞았다
print("\(name2.로) 맞았다") // 귤로 맞았다
print("\(name3.로) 맞았다") // 밥으로 맞았다
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment