[iOS] UserDefaults와 SubScript의 필연적 만남

유인호·2024년 1월 29일
0

iOS

목록 보기
27/73
post-custom-banner

[iOS] UserDefaults와 SubScript의 운명적 만남의 후속편임.


리팩토링하기 싫어서 빈둥거리다가 리팩토링 과제가 주어져서 생각난김에 게시물에서 제시해본 대로 리팩토링을 한번 해보았음.

extension UserDefaults {
	enum BoolUserDefaultsKeys: String, CaseIterable {
		case isFirstStart
	}

	enum StringArrayUserDefaultsKeys: String, CaseIterable {
		case searchHistory
		case likeList
	}

	enum StringUserDefaultsKeys: String, CaseIterable {
		case userProfile
		case userNickname
	}


	subscript(item: BoolUserDefaultsKeys) -> Bool {
		get {
			return UserDefaults.standard.bool(forKey: item.rawValue)
		} set {
			UserDefaults.standard.setValue(newValue, forKey: item.rawValue)
		}
	}

	subscript(item: StringUserDefaultsKeys) -> String {
		get {
			return UserDefaults.standard.string(forKey: item.rawValue) ?? ""
		} set {
			UserDefaults.standard.setValue(newValue, forKey: item.rawValue)
		}
	}

	subscript(item: StringArrayUserDefaultsKeys) -> [String] {
		get {
			return (UserDefaults.standard.array(forKey: item.rawValue) ?? []) as! [String]
		} set {
			UserDefaults.standard.setValue(newValue, forKey: item.rawValue)
		}
	}

	static func resetUserDefaults() {
		for item in BoolUserDefaultsKeys.allCases {
			UserDefaults.standard.removeObject(forKey: item.rawValue)
		}
	}

	static func resetSearchHistory() {
		UserDefaults.standard.removeObject(forKey: StringArrayUserDefaultsKeys.searchHistory.rawValue)
	}

	static func deleteSearchHistroy(_ index: Int) {
		var data = UserDefaults.standard[.searchHistory]
			data.remove(at: index)
			UserDefaults.standard[.searchHistory] = data

	}

	static func isStuffInList(_ id: String) -> String {
		let lists: [String] = UserDefaults.standard[.likeList]
		for list in lists where list == id {
			return "heart.fill"
		}
		return "heart"
	}

	static func likeToggle(_ id: String) {
		var lists: [String] = UserDefaults.standard[.likeList]
		for list in lists where id == list {
			UserDefaults.standard[.likeList] = lists.filter( { $0 != id })
			return
		}
		lists.insert(id,at:0)
		UserDefaults.standard[.likeList] = lists
		return
	}
}

의도한대로 매우 잘 작동한다 굿굿

profile
🍎Apple Developer Academy @ POSTECH 2nd, 🌱SeSAC iOS 4th
post-custom-banner

0개의 댓글