TIL_20171218 ~ 20171224
18 Dec 2017 | TIL lazy extension protocol pragma_mark2017.12.18
TIL
- ์ ๊ท์ ์ฐ์ต - ์์ ์กํ๋ ์ ๊ทํํ์, regexOne์์ ์ฐ์ต
lazy
์ง์ฐ ์ ์ฅํ ํ๋กํผํฐ- JSON step2 ํผ๋๋ฐฑ ์ฒ๋ฆฌ
- extension์ protocol์ ์ฉ : Array์ Dictionary๋ฅผ ConvertTarget ํ๋กํ ์ฝ๋ก ์ถ์ํํ๊ณ , convertValues() ํจ์๋ฅผ ์ ๊ฑฐ : ํ๋ ์ผ์ ๋๊ฐ๊ณ , ๋ฆฌํด๊ฐ์ ์ดํ์ ์ฒ๋ฆฌํ๋ ๋ฉ์๋๋ ๋๊ฐ์ ๋ ํจ์๊ฐ ์๋๋ฐ, ๋ฆฌํดํ์ ์ด ๋ฌ๋๋ค. ์ด๋ฅผ ํ๋์ ํ๋กํ ์ฝ๋ก ์ถ์ํํ๊ธฐ์ํด์ ์๋์๋ swift์ ํ์ ์ extension์ ์ ์ฉํด์ ํ๋กํ ์ฝ๋ก ์ถ์ํํ๋ค. > ์ถ์ํ๋ก ์ธํด์ ์ค๋ณต๋๋ ๋ฉ์๋๋ ์ค์ด๊ฑฐ๋ private์ผ๋ก ๊ฐ์ถ ์ ์์๊ณ , ๊ณผ๋ํ๊ฒ ์ฐ์ธ switch-case๋ฌธ์ ์ค์ผ ์ ์์๋ค.
- extension์ ์ฌ์ฉ (pragma mark ์ฌ์ฉ) : ํ ๊ฐ์ฒด์ ์ฝ๋๊ฐ ๋๋ฌด ๊ธธ์ด์ง๋ฉด ๊ฐ๋
์ฑ์ ์ํด์ extension์ ์ฌ์ฉํ์๋๋ฐ, extension์ ์ด๋ ๊ฒ ์๋ฏธ์์ด ์ฌ์ฉํ๋๊ฒ ์๋๋ผ๊ณ ํจ. ์๋ฏธ์์ด ์ฌ์ฉ๋ extension์ ์ ๊ฑฐํ๊ณ
// MARK:
์ฃผ์์ ์ฌ์ฉํ๋ค. ์ค์ํํธ์๋ MARK๋ง๊ณ ๋ ํน๋ณํ ์ฃผ์์ด ์๋ค. pragma mark๋ Objective-C์์ ์ฌ์ฉ๋๋ ๊ตฌ๋ฌธ์ด๋ค. (์ค์ํํธ์์๋// MARK:
,// TODO:
,// FIXME:
๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.) ์ด๋ฐ ํค์๋๋ค์ ์ฌ์ฉํด์ ์ฃผ์์ ๋ฌ๋ฉด Quick jump bar์์ ์ฑ ๊ฐํผ์ฒ๋ผ ์ฃผ์๋ด์ฉ์ ๋ณผ ์ ์๋ค! ์ฐธ๊ณ ์ฌ์ดํธ1 ์ฐธ๊ณ ์ฌ์ดํธ2
2017.12.19
TODO
- JSON step2 ํผ๋๋ฐฑ ์ฒ๋ฆฌ
- JSON step3 ์์
- ์ ๊ทํํ์ ๊ณต๋ถ
- regexOne์์ ์ฐ์ต
- InputView - GrammarChecker - ParseTargetFactory ์ค๊ณ
- GrammarChecker๋ฅผ InputView์ ParseTargetFactory์ฌ์ด ํ๋ฆ์ ์์น
- GrammarChecker์ ์ ๊ทํํ์ ์ ์ฉ
- (GrammarChecker์ ์๋ฌ์ฒ๋ฆฌ ์ ์ฉ) - ์ค๋ ์๋ ์ง๋
2017.12.21
TODO
- git ์ ์ฅ์ originํ์ธ - ๋ฆฌ๋ชจํธ์ ์คํ ๋ธ๋์น๋ง ํธ์๋์ด์๊ณ ์์ด๋ ๋ธ๋์น๋ ์ต์ ์ํ๊ฐ ์๋ใ ใ
- ์ ๊ท์ ์ ์ฉํ step3 ์งํ
- ์ ๊ท์์ ํ์ฉํ ์ ์๋ ๋ฉ์๋ ์ฐพ๊ณ ๊ธฐ์กด ๋ก์ง์ด๋ ์ฐ๊ฒฐ์ํค๊ธฐ
- object์์ ์๋ Array๋ฅผ ๊ฒ์ฌํ๊ณ ํ๋ณํํ๋๊ฒ ์ถ๊ฐ
[]
์ด๋ฉด์ ๋ฐธ๋ฅ๊ฐ ๋์ ๋๋ฆฌ ํํ๋ก ์๋ ๊ฒ ๊ฑธ๋ฌ๋ด๊ธฐ 1. git json์ ์ฅ์ youth๋ธ๋์นํ์ธํ๊ธฐ. ์ค๋ฆฌ์ง์ด ์ด๋๋ก ๋๋์ง, ์ง๊ธ ์คํ ๋ธ๋์น๋ง ๋๋ ์ ธ์๊ณค ๋ฆฌ๋ชจํธ์ ๋ด ์์ด๋ ๋ธ๋์น์ ํ๋๋ ํธ์๊ฐ ์๋ผ์ด์์ 2. ์ ๊ท์ ์ ์ฉํ json step3 ๋นจ๋ฆฌ ์งํ. ์ ๊ท์ ํด๋์ค ์ด์ฉํด์ ๋ง๋ ํจํด ์ฐพ์๋ด๊ณ ๊ธฐ์กด ๋ก์ง์ด๋ ์ฐ๊ฒฐ์ํค๊ธฐ. ์ค๋ธ์ ํธ์ผ๋ ๋ฐฐ์ด ์์ ๊ฒ์ฌํ๊ณ ํ๋ณํํ๋๊ฑฐ ์ถ๊ฐํ๊ธฐ. ์ค๋ธ์ ํธ๊ดํธ์ด๋ฉด์ ๋์ ๋๋ฆฌ ํํ๋ก ๋ค์ด์๋๊ฑฐ ์ธ๊ฑฐ ๊ฑธ๋ฌ๋ด๊ธฐ
TIL
- git: ์คํ
๋ธ๋์น๋ง ๋๋ ์ ธ์๊ณ , ๋ฆฌ๋ชจํธ ์ ์ฅ์์ ํ๋๋ ํธ์๊ฐ ์๋์ด์์๋ค.
- ๋จผ์ ๋ก์ปฌ youth27๋ธ๋์น์์ status๋ฅผ ํ์ธ > upstream์ผ๋ก๋ถํฐ pull์ ํ๋๋ ํ๋ก์ ํธ ๋ฆฌ๋ชจํธ(์ฝ๋์ค์ฟผ๋) ์ ์ฅ์์ ๋์ ๋ก์ปฌ๋ธ๋์น์ ์ฑํฌ๊ฐ ๋ง์๊ณ , ๊ทธ ์ํ์์ ๋ฆฌ๋ชจํธ์ ์ฅ์๋ก pushํ๋ ์ฑํฌ๊ฐ ๋ง์๋ค. (ํ์ฌ ์ฝ๋์ค์ฟผ๋์ youth27์ ์ฅ์ ๋ชจ๋ step2๊น์ง ์ ๋ฐ์ดํธ๋ ์ํฉ) ๊ทธ ์ดํ๋ก ๋๊ฐ์ด step3 ๋ธ๋์น ๋ฐ์ ์์ ํ๋ ๋ฌธ์ ์์๋ค. ์๊ฐ๋ณด๋ค ์์ฒญ ์ฝ๊ฒ ํด๊ฒฐ!
- git์ด ๊ผฌ์๋ค๊ณ ์๊ฐ์ด ๋ค์์๋ ์ด๋๋ถํฐ ์ฑํฌ๊ฐ ์๋ง์๋์ง๋ฅผ ํ์ธํ๊ณ ์ฐจ๊ทผ์ฐจ๊ทผ ํด๊ฒฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค!(์์ ๊ฐ ์ป์)
- ์ ๊ท์ ํ์ฉ
matches
ํจ์ : ์ ๊ท์์์ ์ธํ ์ดํ์ ๊ทธ ํด๋์ค์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ชฐ๋์๋๋ฐ, ๊ฒ์์ผ๋ก ์ ์ถํด์ ํจํด๊ณผ ์ผ์นํ ๋ฌธ์์ด๋ค์ [String]์ผ๋ก ๋ฆฌํดํด์ฃผ๋ matchesํจ์๊ฐ ์์๋ค. matches์์ ๋ฆฌํดํ ๊ฐ์ value๋ง๋ค ํ๋์ฉ ๊ฒ์ฌํด์ ๋ง๋ ํ์์ธ์ง ์๋์ง ๊ฒ์ฌ, ์๋ฌ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๋ค. - ์ ๊ท์ ์ ์ธ ์ดํ์ Parser๊ฐ ๊ฐ๋จํด์ก๋ค.
- ์นด์ดํ ํ๋ ๊ฐ์ฒด, Data Convertingํ๋ ๊ฐ์ฒด์ Array ์ผ์ด์ค๋ฅผ ์ถ๊ฐํด์ ํด๊ฒฐ!
/*
์ค๊ดํธ ํ ์ธํธ ์์ ๋ฌธ์ : \{(.*?)\}
๋ฐ์ดํ ํ ์ธํธ ์์ ๋ฌธ์ : \"(.+?)\"
Array : true|false|\".+?\"|\d+|\{.+?\}
Object : (\".+?\")\:(true|false|\".+?\"|\d+|\[.+?\])
์ด ์ค๋ธ์ ํธ์์ 1 depth ์ ๋ ๋ ๋ค์ด๊ฐ์ ex) object์ ์์๋ฅผใ
ก"dee":234 ์ด๋ ๊ฒ ๋ผ์ด๋จ์ผ๋ฉด, ์ฌ๊ธฐ์ "ใ
ใ
ใ
":ใ
ใ
ใ
์ธ์ง ๊ฒ์ฌ๋ฅผ ํด์ผํ๋ ๊ฒ. ์ ๊ท์ ํ ์ค๋ก ์ค๋ธ์ ํธ ํํ ์ฒดํฌ๋, ๊ทธ ์์ ๊ฐ๊ฐ ์์๊ฐ "key":value ํํ๋ก ์ ๋ค์ด์๋์ง ์ฒดํฌํ๊ธฐ๊ฐ ํ๋๋๊น. ์ฐจ๋ผ๋ฆฌ ์ ์ฒด์์ ์๋ผ์ง ์์ ๋ฉ์ด๋ฆฌ๋ฅผ ๊ฒ์ฌํ๋ ๋ค๋ฅธ ์ ๊ท์์ ํ๋ ๋ ๋ง๋ค๋ ๊ฐ, ๋ก์ง์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฐ ํด์ ๋์
๋๋ฆฌ ํํ๊ฐ ๋ง๋์ง ๊ฒ์ฌํ๋๊ฒ ๋ ํธํ ๋ฐฉ๋ฒ์ผ๋ฏ.
[true,"sdfe",false,123,{"dee":234,"ss":false,"er":"wert"},"rr"]
{"dee":234,"ss":false,"er":"wert"}
{"dee":234,"ss":false,"er":["hana","hayul","haun"]}
["dee":234,"ss":false]
{"d":"e","t":12,"rr":false,"array":[12,true]}
GrammarChecker์์
1. ์ ์ฒด format ๊ฒ์ฌํ๊ณ ๋ด๋ถ ๊ฐ String๋ฐฐ์ด๋ก ๋ง๋ค๊ธฐ
2. String๋ฐฐ์ด์ ๊ฐ value๋ฅผ ํ๋์ฉ ๊ฒ์ฌํ๋ ๊ฒ ๋ง๋ค๊ธฐ (Arrayํํ์ผ๋ ๋์
๋๋ฆฌ๊ฐ ๋ค์ด์ค๋ฉด ์๋๋๊ฒ")
*/
func matches(for regex: String, in text: String) -> [String] {
do {
let regex = try NSRegularExpression(pattern: regex)
let nsString = text as NSString
let results = regex.matches(in: text, range: NSRange(location: 0, length: nsString.length))
return results.map { nsString.substring(with: $0.range)}
} catch let error {
print("invalid regex: \(error.localizedDescription)")
return []
}
}
let testString = "[true,false,123,\"esdf\",{\"dee\":234,\"ss\":false,\"er\":\"wert\"},\"rr\"]"
let arrayformat = "true|false|[0-9]+|\\{.+?\\}"
let result = matches(for: arrayformat, in: testString)
print(result)
2017.12.22
TIL
- JSON step3 ํผ๋๋ฐฑ์ฒ๋ฆฌ
- ์๋ฌ์ฒ๋ฆฌ
- ํ์ํ๊ณณ์์๋ง ์ปจํธ๋กคํ๋ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ ์ ์ด (main๊น์ง ๊ฐ์ catch์ํ๋๋ก)
- ์ ๊ทํํ์์ผ๋ก ๊ฑฐ๋ฅด๊ณ ๊ฐ๊ฐ ๋ฐธ๋ฅ๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ ์ ํํ (value ํ๋ ๊ฒ์ฌํ ๋๋ ์ ๊ทํํ์ ํ์ ๋ฐ๋ผ์ ๋ง๋์ง ์ฒดํฌํ๋๋ก ๋ณ๊ฒฝ)
- ๋ก์ง ์ค๊ฐ์์ ํ๋ฆ์ ์ดํ๋๊ฒ ์์ด๋ดค์โฆํ๋๊ฑฐ๋ ์ํ๋๊ฑฐ๋ rethrow, throw ๋ค์ด๊ฐ๋ ํจ์์ ์๋ ๋๊ฐ์๊ฑฐ๊ฐ์์ rethrow/throw๋ก ํด๊ฒฐํ๊ธฐ
2017.12.24
TIL
JSON ๋ก์ง์ ๋ค์ ๊ทธ๋ ค๋ณด๊ณ ๊ฐ์ ๊ณผ ์ถ๊ฐ ๋ฏธ์ ์ ์ฉ์ ์ํด ํ์ํ ๊ฒ๋ค์ ์ ๋ฆฌํ๋ค.
- Input - GrammarChecker - Parser > [String] - Convert (๋ง๋ ๊ฐ์ผ๋ก๋ง converting์ ํ๋๊น parser ๋ค ๋ถํฐ๋ ๊ฒ์ฌํ ํ์ ์์)
- GrammarChecker์์ typecheck๋ฅผ ํ๊ณ ์ ๊ทํํ์์ผ๋ก value ํ๋์ฉ ์ฒดํฌ (2 depth๋ถ๊ฐํ๋๊น)
- ์ ๊ทํํ์์ผ๋ก value ๊ฒ์ฌํ๋ ๊ฒ ๋ฃ๊ธฐ (ํ๋ฒ์ ๊ฒ์ฌ ๋ชปํ๊ฒ ์ใ ใ )
- GrammarChecker์ Manager๋ฉ์๋
- manager๋ฉ์๋๋ arrayformat / arrayvalue / objectformat /objectvalue๋ฅผ ๋ฉ์ธ๋ฉ์๋์ฒ๋ผ ์คํํจ (if array์ธ์ง bool์ธ์ง ํด์)
- input์ด array์ธ์ง object์ธ์ง ์ฒดํฌ
- array์ด๋ฉด arrayformat๊ฒ์ฌ/value๊ฒ์ฌ object์ด๋ฉด format value ๊ฒ์ฌ
- ๊ฐ format๊ณผ value๋ฉ์๋๋ ๊ฒ์ฌํด์ ์ ๊ท์์ ๋ง์ง ์๋ ํํ์ด๋ฉด false๋ฅผ ๋ฆฌํดํ๋ ๋ฆฌํดํ์ Bool์ ๋ฉ์๋
- ๊ทธ๋ผ ๊ทธ ๋งค๋์ ๋ false๋ฅผ ๋ฆฌํด๋ฐ๊ณ , ํธ์ถํ ๋ฉ์๋์์ false๋ฅผ ๋ฆฌํด๋ฐ์ผ๋ฉด error๋ฅผ throwํ๋ค.
- ๋งค๋์ ๋ฉ์๋๊ฐ ๋ฆฌํด๋ฐ์ bool๊ฐ์ด true์ด๋ฉด ๊ทธ ํฌ๋งท์ ๋ง๋๋ก value๋ฅผ ๋ถ๋ฆฌํด์ [String]์ ๋ฆฌํดํ๊ณ , ๊ทธ [String]์ Parser๋ก ๋ณด๋ด์ ธ์ ๋๋จธ์ง ๋ก์ง ์ฒ๋ฆฌ.
- GrammarChecker์์์๋ง ์๋ฌ๊ฐ ํธ๋ค๋ง๋๋๋ก ์ค๊ณ. ๊ฒฐ๊ตญ Manager๋ง public func์ด๋ฉด ๋ ๊ฒ๊ฐ๋ค.
- ์ต๋ํ ๋ค๋ฅธ ํ๋ฐ๋ถ ๋ก์ง์๋ ์๋ฌ์ฒ๋ฆฌ๊ฐ ์ํฅ์ด ์๋๋ก ์๋จ์์ ๋ชจ๋ ๊ฒ ๋ค ์ฒดํฌ๋๊ฒ ๋ง๋ค์์
ํ์ํ ๊ฒ๋ค
- Array Value์ object value๋ฅผ ์ฒดํฌํ ๋ (2depth๋ก ๋๋)ํ์ํ ์ ๊ท์. contains๋ฅผ ์ฐ๋ฉด ์ค๊ฐ์ ,๋ :์ด ๋ค์ด๊ฐ ๊ฒฝ์ฐ ๋ถ์ ํํ๊ฒ ๊ฑธ๋ฌ์ง ์ ์์
- value ์ฒดํฌํ๋ ์ ๊ทํํ์ ๋ง๋ค๊ธฐ
- manager๋ฉ์๋ ๋ง๋ค๊ณ checking๋ฉ์๋๋ ๋ค private์ผ๋ก ๊ฐ์ถ๊ธฐ- ๋งค๋์ ์์ ์ฒดํน ๋ฉ์๋ ํธ์ถ
- ๋งค๋์ ๋ฉ์๋ ๋ง๋ค๊ธฐ
- ์ฒดํน ๋ฉ์๋๋ฅผ Boolํ์ ๋ฆฌํด์ผ๋ก ๋ง๋ค๊ธฐ
- ๊ฐ๊ฐ์ ์ฒดํฌ ๋ฉ์๋๋ฅผ boolํ์ ์ผ๋ก ๋ณํ
- manager๊ฐ true๋ฅผ ๋ฆฌํด๋ฐ์์๋ ๋ง๋ [String]์ผ๋ก ์๋ฅด๋ ๋ก์ง์ด ํ์ํ๋ฐ ๊ทธ๊ฒ checker์์๋ ์๋๋์ง๊ผญ ๋ฐ๋ก๋ง๋ค์ด์ผ๋๋์ง ์๊ฐํ๊ธฐ..? checker๋ Bool๋ฆฌํด์ด๋ค ใ ใ
- ํ์์์ ์๋ฅด๋ฉด๋์ง์์๊น!? ํ์์์ ์๋ฅด๊ณ dataconverter๋ก ํ๋์ฉ ๋ณด๋ด๊ธฐ!??!!?!?!
- Parser๋ก ๋์ด๊ฐ๋ ์คํธ๋ง์ ์ด์ ๋ฌธ๋ฒ์ฒดํฌ๋ ์์ ํ ํ์๊ฐ ์๋ String์ด์ด์ผ๋๋๋ฐ ์ง๊ธ ์ง ๋ก์ง์ผ๋ก ํ๋ฉด ๊ทธ๊ฒ ๋๋๊ฒ ๋ง๋์ง ํ๋ฒ๋ ์๊ฐํด๋ณด๊ธฐ
Comments