Swift中的扩展
我在以前的博客中使用过Extension for Label。 在那里,我在扩展中添加了所有代码,但是您为什么想在本章中知道为什么这样做,我将很清楚所有这些东西在您自己的项目中创建和使用非常容易。
什么是扩展?
扩展为现有的class , structure , enumeration , or protocol type
添加了新功能。 这包括扩展您无法访问原始源代码的类型的能力(称为追溯建模)。
扩展类似于Objective-C中的类别。 (与Objective-C类别不同,Swift 扩展没有名称。)
资料来源–苹果文件。
创建您的第一个扩展
通过写出类或Controller类(如extension
和类名)的侧面, 扩展很容易创建
扩展UserModel {
//您的功能
}
您可以将其用于符合协议
如果您在项目中使用表格视图,则需要使用这些方法来确认协议,但是,如果项目中以及其他协议中有很多方法,那么这将很难管理,并且大多数情况下,我们在查找代码时会遇到问题在我们班里。
在这个类中,您可以看到,这是每个这样开始开发的开发人员在开始阶段的基本代码。
如果您开始从事实际项目,这是一个很小的类,那么将有更多的功能和对象变得更加难以快速查找或检查您的代码。
现在,您可以非常清楚地看到您的代码被分为具有适当功能标识的组,其中Extension非常清楚地在此处定义了代码。
额外提示–“ MARK ”这将在文档编制过程中出现。 您可以访问此 ( NSHipster )链接以更好地理解Swift语言中的代码文档。
带扩展的代码分离
您可以借助扩展来编写属于特定协议的单独协议方法。 当您将来再次在同一个类中进行工作或进行修改时,它非常易于理解的代码。
芒果类: UIViewController {
覆盖func viewDidLoad (){
超。 viewDidLoad ()
}
} // MARK :-TableView数据源方法
扩展芒果 : UITableViewDataSource { func tableView (_ tableView:UITableView, numberOfRowsInSection 部分 :Int)-> Int {
}
func tableView (_ tableView:UITableView, cellForRowAt indexPath :IndexPath)-> UITableViewCell {
}
}
让我们看看扩展的用途
在这里,我正在创建模型,它将支持多个自定义初始化程序。
struct UserModel :可编码{
var 名称 :字符串
var userId :Int
}扩展UserModel {
枚举CodingKeys :字符串, CodingKey {
案例名称 =“用户名 ”
case userId =“ user_id”
}
}扩展UserModel {
// MARK:-初始化
初始化 (_ dic :[String:Any]){
自。 名称 = dic [“ user_name”]如? 字符串?? ”
自。 userId = dic [“ user_id”]如? Int ?? 0
}
}
可以使用不同方式的一种模式🚀
让字典= [“ user_name”:“ Rahul”,“ user_id”:43] 作为 [String:任何] //模型初始化类型
// 1 let model = UserModel (名称:“ Anand”,userId:1)
model.name // 2 let newModel = UserModel (字典)
newModel.name // 3 做 {
//我们从网络请求中获取的数据
让解码器= JSONDecoder ()
让数据=尝试! JSONSerialization .data(withJSONObject:dictionary,options:[])//测试数据
让响应=尝试解码器 .decode( UserModel .self,来自:数据)
print(response)//输出
} 捕获 {打印(错误) }
让我们尝试其他事情
您可以为任何 class
例如–
扩展字符串 {
// MARK:-用于String的首字母大写
private func capitalizingFirstLetter ()->字符串{
让first = String(self.prefix(1))。大写
让其他= String(self.dropFirst())
返回第一+其他
}
变异func capitalizeFirstLetter (){
自我=自我。 capitalizeFirstLetter ()
}} //扩展名的使用
var testString =“橙色”
testString。 capitalizeFirstLetter ()
print (testString) //输出-橙色
结论
在这一部分中,我已经介绍了如何创建扩展及其使用。 现在,您已经从基本使用到高级了解了。 您可以为任何class , structure , enumeration , or protocol.
创建自己的扩展class , structure , enumeration , or protocol.
该扩展是Swift语言中一个非常强大的功能。 您可以使用代码来制作更简单易懂的功能。 您可以根据自己的理解和要求编写独立且易于管理的代码。 我已经为扩展添加了Git存储库 ,您可以检查它。 🎉
谢谢 !
如果您对本教程有任何疑问? 推特我: @Anand
- 迭代错误数组时发生Swift内存泄漏
- 仅提取PHAssetMediaTypeImagetypes资产收集typesPHAssetCollectionTypeSmartAlbumtypes的照片
- 这些简单的步骤使您的iOS应用程序易于阅读。
- XCode错误itms-90035 – 签名无效?
- 应该成为FirstResponder()总是被调用的主线程?
- 没有架构来编译(ARCHS = arm6 arm7,VALID_ARCHS = armv7)
- 如何隐藏IQKeyboardManager中的工具栏iOS Swift 3
- iPhone中的循环引用Cocos2D游戏编程教材
- devise这个核心数据库的好方法是什么?