Created
December 16, 2019 06:50
-
-
Save maakcode/110216c1af4afe7e203b956bece0dd27 to your computer and use it in GitHub Desktop.
Swift Gists
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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