// // APAudioToRingVM.swift // AIPlayRingtones // // Created by mini on 2025/5/19. // import Combine import ObjectMapper class APAudioToRingVM { private var cancellables = Set() //输入框内容 @Published var promptText:String = "" @Published var ringFilePath:URL? //选择生成类类型 var generateStyleIndex:Int = 0 @Published var selectedGenerateModel:ASGenerateStyleModel? lazy var generateStyleModels: [ASGenerateStyleModel] = { var ptpStyleModels = [ASGenerateStyleModel]() if let dataArray = Mapper().mapArray(JSONfile: "ring_rtr_style.json"){ ptpStyleModels = dataArray if let model = dataArray.safeObj(At: generateStyleIndex) { selectedGenerateModel = model //加上默认的选择 } } return ptpStyleModels }() @Published private(set) var isCanGennerate: Bool = false init(){ // Publishers.CombineLatest3($promptText, $ringFilePath,$selectedGenerateModel) Publishers.CombineLatest($ringFilePath,$selectedGenerateModel) .map { ringFilePath,generateStyleModel in // 当两者长度都 > 0 时返回 true return ringFilePath != nil && generateStyleModel != nil } .assign(to: \.isCanGennerate, on: self) .store(in: &cancellables) } //用户生成图片的TSGenerateStyleModel var generateStyleModel:ASGenerateStyleModel{ let generateStyleModel = selectedGenerateModel! generateStyleModel.inputText = promptText generateStyleModel.duration = 10 generateStyleModel.upLoadFilePath = ringFilePath generateStyleModel.generateType = .ringToRing return generateStyleModel } }