GBA-8-19/Features/Protocols/AnyOption.swift
bluesea 2d62f40b7c s
2024-06-14 18:16:51 +08:00

49 lines
1004 B
Swift

//
// AnyOption.swift
// HthikFeatures
//
// Created by Hthik on 4/12/23.
// Copyright © 2024 Hthik
//
import SwiftUI
public protocol AnyOption<Value>: AnyObject, Identifiable
{
associatedtype Value: OptionValue
associatedtype DetailView: View
var name: LocalizedStringKey? { get }
var description: LocalizedStringKey? { get }
var key: String { get }
var settingsKey: SettingsName { get }
var values: (() -> [Value])? { get }
var detailView: () -> DetailView? { get }
var value: Value { get set }
}
extension AnyOption
{
public var id: String { self.key }
}
// Don't expose `feature` or `key` setters via AnyOption protocol.
internal protocol _AnyOption: AnyOption
{
var key: String { get set }
var feature: (any AnyFeature)? { get set }
var wrappedValue: Value { get set }
}
extension _AnyOption
{
public var value: Value {
get { self.wrappedValue }
set { self.wrappedValue = newValue }
}
}