Transfiguration 2.0.0

Transfiguration 2.0.0

Siam Biswas维护。



  • Siam Biswas

Transfiguration

SPM compatible Carthage compatible CocoaPods Platform UITableView UICollectionView UIPickerView

在Swift中将数据转换为可重复使用的视图的神秘书法

Transfiguration 可以为您提供一种以最小代码块创建数据驱动iOS应用程序的解决方案,它帮助您通过最少努力以可重复使用的视图,如UITableView、UICollectionView或UIPickerView来展示您的数据集。

使用方法

场景一

假设您有一个包含字母的数组,您想将其表示为 UITableView。要使用 Transfiguration 完成此操作,您只需将数据绑定到您的表格视图,并通过闭包附加视图配置。

class ViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        tableView.bind(["A","B","C"]).configure{ view, container, indexPath, data in
            view.textLabel?.text = data[indexPath.row].name
        }

    }

}

场景二

现在,您想使用 UICollectionView 来表示您的字母数组。基本步骤与上一个类似,还需提及您的自定义 视图类型 和大小配置。

class CustomCell : UICollectionViewCell { ... }

class ViewController: UICollectionViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
       collectionView.bind(["A","B","C"]).configure(CustomCell.self){ view, container, indexPath, data in
            view.setupData(data: data[indexPath.row])
        }.size{ container, indexPath, data in
            return CGSize(width: 100, height: 100)
        }

    }

}

场景三

现在您有一个 UIPickerView,并希望其中填充字母数组。让我们看看如何实现。

pickerView.bind(["A","B","C"]).title{ container, indexPath, data in
    return data[indexPath.row]
}

这是 Transfiguration 的基本用法。要了解一些更复杂的场景,请查看示例文件。

可变型

通过使用 Transfigurable 包装您的数据,您可以访问所有可用的数据操作。它基本上为您的数据操作设置了一个观察者,这样您就无需从视图层调用 reloadData() 或相关函数。您还可以在执行此操作时控制动画和强制重新加载数据。

可用操作
追加分区
插入分区
更新分区
删除分区
追加项
插入项
更新项
删除项
清空全部

可分节

您绑定到列表或网格视图的数据持有者必须遵守 Sectionable。您可以通过遵守 Sectionable 协议来创建自定义分区。同时,为了组合不同类型的数据分区,您可以使用 枚举

class CustomSection: Sectionable {

    var header:String?
    var footer:String?
    var count: Int
    
}
enum CompositionSections: Sectionable {
   case image,video,text
}

可操作

可操作 为你的 可节选 数据提供了一些数据操作能力,如追加、插入、更新和删除。

class CustomSection: Sectionable,Operatable { 
   var data: [String]
}
enum CompositionSections: Sectionable,Operatable { .... }

可识别

通过符合 可识别 规范,你的 可节选 数据可以获得一个唯一的标识和优先级,以确保精确的数据操作。

class CustomSection: Sectionable,Operatable,Identifiable {
    var identifier: String
    var priority: Int?
}
enum CompositionSections: Sectionable,Operatable,Identifiable { .... }

自定义布局

Transfiguration 库为 UICollectionView 提供了一些酷炫的自定义布局。

可用的布局
UICollectionViewWaterfallLayout
UICollectionViewTagLayout
UICollectionViewStackLayout
UICollectionViewCardLayout
UICollectionViewGridLayout
let layout = UICollectionViewWaterfallLayout()
layout.numberOfColumns = 2
let viewController = UICollectionViewController(collectionViewLayout: layout)
         
let layout = UICollectionViewTagLayout()
layout.scrollDirection = .horizontal
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
         

请查看示例文件以了解所有自定义布局的演示。

动态尺寸

如果你已经熟悉使用 UICollectionView,那么你一定知道代表可变尺寸的视图是多么困难。现在,有了 Transfiguration 提供的默认尺寸配置,集合作业的体验将会更容易和有趣。

collectionView.bind(["A","B","C"]).configure(CustomCell.self){ view, container, indexPath, data in

    view.setupData(data: data[indexPath.row])

}.sizingView{ container, indexPath, data in
    
    let view = CustomCell.sizing
    view.setupData(data: data[indexPath.row])
    return view.contanerView
        
}

在设置 尺寸 配置时,请确保您的视图已经设置了所有所需的自动布局来支持动态高度或宽度。此外,建议使用动态单元格的静态实例以提高性能。

安装

CocoaPods

您可以使用CocoaPods通过将其添加到您的Podfile中安装Transfiguration

platform :ios, '8.0'
use_frameworks!

target 'MyApp' do
    pod 'Transfiguration'
end

Carthage

您可以通过将Transfiguration添加到您的Cartfile中,使用Carthage来安装它。

github "siam-biswas/Transfiguration"

如果您使用Carthage来构建依赖项,请确保您已将Transfiguration.framework添加到目标中的“链接框架和库”部分,并在Carthage框架复制的构建阶段中包含它们。

Swift 包管理器

您可以通过向您的Package.swift文件中添加适当的描述,使用Swift 包管理器安装Transfiguration

import PackageDescription

let package = Package(
    name: "YOUR_PROJECT_NAME",
    dependencies: [
        .package(url: "https://github.com/siam-biswas/Transfiguration.git", from: "2.0.0"),
    ]
)

手动

手动将此库用于您的项目,您可能

  1. 对于项目,只需将所有从(源\Transfiguration)的 (.swift) 文件拖放到项目树中即可
  2. 对于工作区,包括整个 Transfiguration.xcodeproj

许可证

本项目受MIT许可条款许可。有关详细信息,请参阅LICENSE文件。