TIL_2019_03
03 Mar 2019 | TIL2019.03.05
func onMapView(_ mapView: NMapView!, didChangeMapCenter location: NGeoPoint) {
mapView.setMapCenter(location)
self.fetchNearMarts(from: location)
}
- ๋ค์ด๋ฒ์ง๋์์ POIData๋ง๋ค์ด์ ๋ง์ปค๋ฅผ ๊ทธ๋ฆฌ๋ ๋์๊ณผ mapview๋ฅผ ๊ทธ๋ฆฌ๋ ๋์์ ๋์์ ํ ๋ ๋ฌธ์ ๋ฐ์
- ์์ ์ : ์์น๋ฅผ ํธ๋ํนํ๋๊ณณ(locationManager)์ด๋ ์ง๋๋ฅผ ์ผํฐ๋ก ์ฎ๊ฒจ ๊ทธ๋ฆฌ๋ ๊ณณ(didMapCenterMoved)์์ fetchNearMarts๋ฅผ ํธ์ถํจ
- ํ์: ๋จผ์ ๋งต๋ทฐ๊ฐ ํ์๋๋ค๊ฐ - ์์น ํธ๋ํน - ๋ง์ปค๊ทธ๋ ค์ง๋ ๋ ์ด์ด๊ฐ ๋ํ๋๊ณ ๋งต๋ทฐ ์ผํฐ๊ฐ ์ฎ๊ฒจ์ง๋ฉด์ ์ง๋๊ฐ ์๋ก ์๊ทธ๋ ค์ง
- ๊ทผ๋ฐ ์๋ก ์๊ทธ๋ ค์ง๋๊ฒ ๋งจ๋ ๋น ํ๋ฉด์ด ์๋๋ผ ์ดใท์ฉ๋๋ ๋ฐ์ฉ ๊ทธ๋ ค์ง๊ณ ๋๋ฆฌ๊ฒ ๊ทธ๋ ค์ง๊ณ ๋ ์ด๋จ๋๋ ๊ฑฐ์ ํ๋ฉด์ 1/5๋ง ๊ทธ๋ ค์ง
- ์์๋๋ ์์ธ: ์ง๋์ center๋ฅผ ์ฎ๊ธฐ๊ณ ๋์ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ fetchํ๊ณ ๋ง์ปค๋ฅผ ๊ทธ๋ฆฌ๋ ๋์์ ํ๋ฉด์ ์ง๋ ํ์ํ๋ ค๋ ์์ ์ด๋ ๋ง์ปค ํ์ํ๋ ค๋ ์์ ์ด ์ถฉ๋(์ด์ฉ๋ฉด ๋ฐ๋๋ฝ - ๋๋ค ๋งต๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๋ ๋์์ด๊ณ ์ฑ๊ฒฉ์ด ๊ฐ์ ๋์์ด๋ผ๋ฉด ๊ฐ์ ์ค๋ ๋์์ ์งํ๋ ์๋ ์๊ธฐ๋๋ฌธ์โฆ?)๋์ ๊ทธ๋ด์๋ ์๋ค๊ณ ์๊ฐํจ
-
ํด๊ฒฐ: ์ง๋์ ์ผํฐ๊ฐ ์ฎ๊ฒจ์ก์๋ ๋งต๋ทฐ๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋ ๋์๊ณผ ๋ง์ปค ๊ทธ๋ฆฌ๋ ๋์์ ๋ถ๋ฆฌํ๋๊น ์ ํ์๋จ
- Swift์ enum์ rawValue๋ฅผ tuple๋ก ํ ์ ์๋๊ฐ?: ๊ทธ๋ฅ์ ๋ชปํจ
enum ErrorCode: (Int, String) { case Generic_Error = (0, "Unknown") case DB_Error = (909, "Database") }
- ์ด๋ด๋ฐ์ ์ฐจ๋ผ๋ฆฌ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ค์
struct Trouble { static let Generic_Error = (0, "Unknown") static let DB_Error = (909, "Database") }
- ๊ทธ๋ฅ ๋ด๊ฐ enum์ rawValue๊ฐ์ผ๋ก ์ฐ๊ณ ์ถ์ ํํํ์
์ RawRepresentableํ๋กํ ์ฝ์ ์ค์ํ๊ฒ ๋ง๋ค๋ฉด ๋๋ค.
enum ErrorCode: RawRepresentable { case Generic_Error case DB_Error var rawValue: (Int, String) { switch self { case .Generic_Error: return (0, "Unknown") case .DB_Error: return (909, "Database") } } init?(rawValue: (Int, String)) { switch rawValue { case (0, "Unknown"): self = .Generic_Error case (909, "Database"): self = .DB_Error default: return nil } } }
-
๋๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ง๋ง ๋๋ UIAlertViewController์ ๋์ธ ์๋ฌ๋ฉ์์ง๋ฅผ staticํ ๋ณ์์ ๋ด์๋๊ณ ์ถ์ด์ enum์ ์ฌ์ฉํ๋ค๊ฐ programdescription์ ์ ๋ enum์ด ๋๋ฌด ์ปค์ ธ์ ๋ถ๋ฆฌํ๋ ค๋ ์ฉ๋์์ผ๋ฏ๋ก ๊ทธ๋ฅ struct๋ฅผ ๋ง๋๋ ๋ฐฉ์์ ์ ํํ๋ค.
- โErrorAlertDescriptionโ declares raw type โ(title: String, message: String)โ, but does not conform to RawRepresentable and conformance could not be synthesized
- enum์ rawValue๋ RawRepresentableํ๋กํ ์ฝ์ ์ค์ํ ํ์ ๋ง ์ ์ธํ ์ ์์ผ๋ฉฐ, ์ด ํ๋กํ ์ฝ์ ์ปค์คํ ํ์ ์ ๋๋๋ ค๋(back and forth) ์ฐ๊ด๋ rawValue๊ฐ์ผ๋ก ์๋์ ๊ฐ์ ์ ์งํ์ฌ ๋๋๋ฆด ์ ์๋๋ก ๋ณด์ฅํด์ค๋ค.
- RawRepresentable์ ํฌ๊ฒ
enumerations with raw value types
์option sets
๋๊ฐ์ง ์นดํ ๊ณ ๋ฆฌ ํ์ ์ผ๋ก ๋๋ ์ ๋ณผ ์ ์์. - string, integer, or floating-point raw type๊ณผ ๊ฐ์ ํ์ ์ ์ด๊ฑฐํ์ผ๋ก ๋ง๋ค๋ฉด, ์ค์ํํธ ์ปดํ์ผ๋ฌ๊ฐ ์์์ RawRepresentableํ๋กํ ์ฝ์ ์ฑํํด์ค๋ค. (ํํ์ ์ฌ๊ธฐ ์๋ ํ์ ์ด๋๊น ์๋๋ค๋ ์๊ธฐ)
2019.03.09
ํ ๊ฒ
- ๋ค์ด๋ฒ์ง๋ ์๋ก์ด api ์ฌ์ฉํ๊ธฐ
- cocoapod์์ ์ค์น ๊ฐ๋ฅ.. ์ง์์ ๋ง๋ค์ด์ฃผ์ง ๊ทธ๋ฌ๋ ใ ใ ใ ใ ์๋ก ๋ค์ ์น ๊ฐ์์ผ๋จ
- cocoapod์์ ์๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐํ๋๊ฒ ๋ถ๋ด์ค๋ฌ์ด๊ฒ, ๋งํธ์ฌ๋๋ ํ๋ก์ ํธ๊ฐ ๋จ์ผ ํ๊ฒ์ด ์๋๋ผ์ ํ๊ฒ๋ง๋ค ๋ค๋ฅด๊ฒ ๋ํ๋์๋ฅผ ์ค์ ํ๋๊ฒ ์ข ์ด๋ ต๋ค.ใ ใ ์ค๋์ ๋ค์ด๋ฒ์ง๋๋ cocoapod์์ ์ค์นํ๋ฉด์ ๊ทธ๋ฌธ์ ๋ ๊ฐ์ด ํด๊ฒฐํด๋ณด๊ธฐ๋ก!
2019.03.13
- ์ ์ฒด ํ๋ฉด ์คํฌ๋กค๋ทฐ safeArea ํ๊น ์ฆ์
- UIScrollView์ ํ๋กํผํฐ๋ฅผ ์กฐ์ ํ๋ฉด ๋จ!
- contentInsetAdjustmentBehavior
- https://medium.com/rosberryapps/ios-safe-area-ca10e919526f
- full screen scrollview์์ ์คํฌ๋กค ๋์์ด, ์ ์ผ top์ด๋ bottom์ผ๋ก ์คํฌ๋กค์ ์์ง์์๋ content inset์ด ์๋์ผ๋ก ์กฐ์ ๋์ด ์ปจํ ์ธ ๊ฐ ๊ฑธ๋ฆฌ๋ฏ์ด ๋ด๋ ค๊ฐ๊ฑฐ๋ ์ฌ๋ผ๊ฐ๊ฒ๋๋ค.
- contentInsetAdjustmentBehavior์ ๊ธฐ๋ณธ ๊ฐ์
automatic
์ด๊ณ , ์์์ safeArea๋ฅผ ์ก์์ค๋ค.
2019.03.14
- Swift Algorithm club Binary Search tree
2019.03.21
- GCD block ๊ณผ animation block์์ ์ retain cycle์ด ์ผ์ด๋์ง ์๋๊ฐ์ ๋ํ ํ ๋ก https://www.reddit.com/r/swift/comments/8fyxlr/why_gcd_and_animate_block_is_not_strong_reference/
2019.03.28
SKStoreProductViewController๋ ์ฑ์คํ ์ด์๋ฅผ ๋ชจ๋ฌ ๋ทฐ๋ก ๋์์ฃผ๋ ๋ทฐ์ปจ์. ๊ทผ๋ฐ ์ด๊ฑธ๋ก ์ ๋ฐ์ดํธ๊ฐ ์๋ ๊ฑฐ๊ฐ์๋ฐโฆ? ์ ๋ฐ์ดํธ๋ ์ฑ์ด ๊บผ์ง ์ํ์์ ์คํ๋์ด์ผ ํ๋๋ฐ ๋ชจ๋ฌ๋ทฐ๋ก ์ฑ์คํ ์ด๊ฐ ๋์์ง๊ณ โฆ ์ผ๋จ ์ ๋ฐ์ดํธ๋ฅผ ๋๋ฅด๋ฉด ์ ๋์ด ์คํ๋๋ฉด์ ์ฑ์ด ์ข ๋ฃ๋ ํ ๋ฐ ์ด๋ฏธ ์ ๋ฐ์ดํธ๋ฅผ ์ ๋ ฅํ์ผ๋๊น ์ค์นํ๋ผ๋ ๋ช ๋ น์ ์ ๋ ฅ๋๊ฑฐ๊ณ ๊ทธ ๋ค๋ผ์ ์๊ด์ด์๋๊ฑด๊ฐ..? ์ฐพ์๋ณด๋๊น ๋์ ๋๋ฒ์งธ ์ถ์ธก์ฒ๋ผ ์ ๋ฐ์ดํธ๊ฐ ์คํ๋๋ฉด ์ฑ์ด kill๋๊ณ ์์์ ์ ๋ฐ์ดํธ๋๋๊ฑฐ ๊ฐ์(์ฐธ๊ณ ) !! ์๋. ๊ทธ๋ฅ openurl๋ก ์ฑ ์ธ๋ถ์์ ์ฑ์คํ ์ด๋ฅผ ํด. ์ด๋ ๊ฒ ๋ฐ๊พผ ์ด์ ๋ ๋ฐ์น์คํฌ๋ฆฐ์์ ๋ฉ์ถค์ํ๋ก (๋งํ์๋ฉด rootViewController์ ๋ฐ์น์คํฌ๋ฆฐ์ผ๋ก ๋์ฒดํ ์ํ๋ก) ์ฑ์คํ ์ด ๋ทฐ์ปจ์ ์ฌ๋๊ฑด๋ฐ modal๋ก ์ฌ๋๊น ์๊ด์์ ๊ฒ ๊ฐ๊ธดํ์ง๋ง, ๊ทธ๋๋ ๋ฐ์น์คํฌ๋ฆฐ์์ ๋ฉ์ถฐ์๋๋ฐ Storekit์ ๋ด๋ถ์์ ์ฌ๋๊ฒ ์ข ์ด์ํ๊ฒ ๋๊ปด์ก๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ฐ์ดํธ๋ฅผ ๋๋ฅด๋ฉด ์ฑ์ด kill๋๋๊ฒ ๋ถ๋ช ํ๋ฐ ๊ผญ ์ฑ ๋ด๋ถ์์ ์ฑ์คํ ์ด ๋ทฐ์ปจ์ ๋์ฐ๋๊ฒ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ง๋ ๋ฐฉ์์ธ๊ฐ์ ๋ํ ๊ณ ๋ฏผ์ด ์์๋ค.
ํ ์คํธํด๋ณด๋๊น itms-apps:// ์คํด์ด ๋์ํด์ ์ฑ์คํ ์ด๊ฐ ์ธ๋ถ์์ ์ด๋ ธ๊ณ , ๋ด ์ฑ์ ๋ฐฑ๊ทธ๋ผ์ด๋์ ์๋ ์ํ. ์ฌ๊ธฐ์ ์ฑ์ ๋ค์ ์ค์นํ๊ฑฐ๋ ์ ๋ํ๋ ๋์์ ํ๋ ์์คํ ์ด ์ฑ์ terminated์ํค๋ ๊ฒ์ ํ์ธํ๋ค.
์ฐพ์๋ณด๋๊น ์ฑ์์ Storekit์ ์ฌ์ฉํ๋ฉด, ์ฑ์ถ์ฒ๊ณผ ๋ฆฌ๋ทฐ / ์ธ์ฑ ๊ตฌ๋งค / ์ ํ๋ฎค์ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค๊ณ ์ค๋ช ๋์ด์๋ค.