TSTextGeneralPicVM.swift 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. //
  2. // TSTextGeneralPicVM.swift
  3. // AIRingtone
  4. //
  5. // Created by 100Years on 2025/3/4.
  6. //
  7. import Alamofire
  8. import ObjectMapper
  9. enum TSGennerateType:Int,Equatable{
  10. case poster = 0 //海报
  11. case photo = 1 //头像
  12. }
  13. class TSTextGeneralPicVM {
  14. //选择 prompt 类型组
  15. lazy var ptpStyleModels: [TSPTPStyleModel] = {
  16. var ptpStyleModels = [TSPTPStyleModel]()
  17. if let dataArray = Mapper<TSPTPStyleModel>().mapArray(JSONfile: "photo_to_photo_style.json"){
  18. ptpStyleModels = dataArray
  19. if let model = dataArray.first {
  20. selectPromptModel = model //加上默认的选择
  21. }
  22. }
  23. return ptpStyleModels
  24. }()
  25. //输入框内容
  26. var promptText:String = "" {
  27. didSet{
  28. isCanGennerateBlock?(isCanGennerate)
  29. }
  30. }
  31. //选择的生成图片的 type
  32. var gennerateType:TSGennerateType = .poster{
  33. didSet{
  34. isCanGennerateBlock?(isCanGennerate)
  35. }
  36. }
  37. //选择的 prompt 类型
  38. var selectPromptModel:TSPTPStyleModel?{
  39. didSet{
  40. isCanGennerateBlock?(isCanGennerate)
  41. }
  42. }
  43. //可生成状态变化 block
  44. var isCanGennerateBlock:((Bool)->Void)?
  45. }
  46. extension TSTextGeneralPicVM {
  47. //是否满足生成条件
  48. var isCanGennerate:Bool {
  49. if selectPromptModel != nil ,
  50. promptText.replacingOccurrences(of: " ", with: "").count > 0
  51. {
  52. return true
  53. }
  54. return false
  55. }
  56. var prompt:String{
  57. var prompt = promptText
  58. if let selectPromptModel = selectPromptModel {
  59. prompt+=", \(selectPromptModel.prompt)"
  60. }
  61. return prompt
  62. }
  63. func saveModel(model:TSGeneralPicModel){
  64. if gennerateType == .poster {
  65. TSPosterHistory.saveModel(model: model)
  66. }else if gennerateType == .photo{
  67. TSPhotoHistory.saveModel(model: model)
  68. }
  69. }
  70. }