swift 新建延展文件_swift 类目和延展 - CSDN
  • swift 2.0 延展 Extension

    2015-10-16 17:58:02
    // 4.Extension 延展 //----OC中有延展 和 类目 ...//----但是swift 中没有这两种的说法了,只有延展。这里的延展,表示的意义是:A.对原有类的扩展,并且只能扩展方法;B.可以扩充协议,并实现。

    // 4.Extension 延展

    //----OC中有延展 类目 两种。其中,延展是声明该类的私有属性和私有方法,封装性强。类目是对系统原有类 进行扩展,可以扩展属性和方法,并且,该扩展的属性和方法都是可以遗传下去的。

    //----但是swift 中没有这两种的说法了,只有延展。这里的延展,表示的意义是:A.对原有类的扩展,并且只能扩展方法;B.可以扩充协议,并实现。


    class Student {

        var name: String?

        var age: Int?

        

        func study(){

            

        }

    }


    //应用场景,如果我们已经封装好了一个Manager类,但是,在后来的使用过程,突然觉得应该跟那个类加一个功能,这时,我们可以直接用延展,不破坏原来的类的封装,并实现了扩展。我个人认为这也很好的体现了面向对象的一大特性:封装。

    extension Student{

        

        func eat(){

            print("学生也是需要吃饭的")

        }

    }


    var student_00 = Student()


    student_00.study()

    //使用延展方法

    student_00.eat()



    //比如,我们现在想这个类遵循某一个协议,这时,也可以使用延展完成。

    extension Student: KeepHouseProtocol{

        

        //因为KeepHouseProtocol是可选方法的协议,所以加@objc

        @objc func clean() {

            print("学生也是需要打扫教室卫生的")

        }

    }

    展开全文
  • ios-延展Extension

    2017-07-26 22:37:10
    其实Extension是个特殊的分类,延展也是类的一部分,延展只有声明没有实现,延展这个特殊的分类是没有名字的,如下所示 @interface 本类名 () @end和本类共享一个实现。 分类和延展的区别 分类有名字,延展没有...

    其实Extension是个特殊的分类,延展也是类的一部分,延展只有声明没有实现,延展这个特殊的分类是没有名字的,如下所示

    @interface 本类名 ()
    {
    
    }
    @end
    和本类共享一个实现。

    分类和延展的区别

    分类有名字,延展没有名字

    每一个分类都有单独的声明和实现,延展却只有声明,没有单独的实现

    延展中的任意成员都可以写,分类就能增加方法

    分类中可以写@property,但是只会生成getter和setter方法

    延展中写@property会自动生成私有变量,也会生成getter和setter方法的实现。

    我们都是将延展写在本类的.m文件中也就是加了个@interface,写在延展中的成员相当于就是这个类中的私有成员,只能在本类中访问,不能再类外被访问。

    我们想要为类定义私有成员就可以用延展。声明在延展中的方法也都是私有方法。私有方法最好声明都写在类的扩展中。这样可以提高代码的阅读性。延展中的@property也有setter方法和getter方法的声明

    展开全文
  • 我们在项目中或多或少都会接触到类别,延展,那么到底类别是什么,而延展又是什么呢?今天我们一块来探讨下: 类别就是为已存在的类添加新的方法,但是不能添加实例变量。比如系统的类,我们看不到他的.m文件,所以...

    我们在项目中或多或少都会接触到类别,延展,那么到底类别是什么,而延展又是什么呢?今天我们一块来探讨下:

    类别就是为已存在的类添加新的方法,但是不能添加实例变量。比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现。这个时候我们可以使用类别来给它添加一些新的方法供我们使用,再具体点说就是,比如说NSString类有10个方法(假设,具体几个,我也没注意),但是呢,NSString可能就是说这10个方法无法满足我们的项目需求,于是我们就会有两种思路,要不就是继承它,然后添加方法,实例变量等,要不就是采用类别的方法来给它添加方法,于是,就引出了我们今天需要探讨的类别。

    好了,那么下边就上代码:

    其实这个没什么好上代码的,就截图看看过程吧点击cmd+n创建新文件,然后出现下图:

    接着就是选择category:

    然后看效果:

    看看实现文件格式:

    就是图片中的,我们创建好了一个category,并且在category中定义了一个方法,方法名是printCustomStr,然后在.m中实现,以后哪里需要用的时候我们导入这个类别的头文件,就可以用它里边的方法了,给firstViewController添加的一些方法


    上边是创建类别,那么什么时候用类别呢?

    总结来说:

    1、类包含了很多个方法实现,而这些方法需要不同团队的成员来实现
    2、当你在使用基础类库中的类时,你不想继承这些类而只想添加一些方法

    那么延展是个什么东西呢?

    在我看来,我什么时候会用延展呢?我在封装控件的时候会用到延展,为什么会用到延展,就是因为我有一些变量,属性,方法等不想暴露在外边,这个时候就可以用到延展,严格意义上来说,oc是没有私有变量或者方法这一说的,不过我们可以通过延展来实现这个私有方法或者变量。


    Hope To Help You !


    技术交流群:141624834 进群请说你看的那篇博客,我们一起探讨成长


    展开全文
  • OC与Swift混编

    2020-08-08 11:43:29
    swift强势来袭,想要紧跟脚步,但之前OC的工程推倒重来在时间和实践上都有点伤神,混编就是这个过渡的桥梁,使用混编,快速完成在OC工程中首次创建swift文件或者swift中首次创建OC文件,都会给出提示是否自动生成一个桥接...

        swift强势来袭,想要紧跟脚步,但之前OC的工程推倒重来在时间和实践上都有点伤神,混编就是这个过渡的桥梁,使用混编,快速完成

    在OC工程中首次创建swift文件或者swift中首次创建OC文件,都会给出提示是否自动生成一个桥接文件,其实自动生成是两个文件,一个可见一个不可见,但是这两个文件的名称都能在配置文件中找到,在使用之前先看个小实验......

    1.使用前需要了解的配置

    做个小实验(只用静静看着就好了):

    1).target-->buildSetting--(输入packaging)

    a.前提条件:工程名字是TimingUsingPickerView

    b.Product Module Name 设置成 "imooc"

    c.Product Name设置成"imooc1"

    d.Defines Module 系统默认是No,此处还是用系统默认的    (这个是经过尝试,设置成Yes 或者No在我目前使用的范围内并没有什么影响,当然个人涉及范围有限,可能有什么未知的影响还没触及,感兴趣可以尝试,欢迎补充~_~)

    配置如下:

    实验配置如图

    2)在OC中创建swift文件 生成桥接文件和隐藏文件:

        target-->buildSetting--(输入swift)

    查看文件名

    如图,可以看到生成的文件名:

    a.桥接文件" TimingUsingPickerView-Bridging-Header.h" 可见的,在工程中可查找到该文件(在swift调用OC文件)

    b.imooc-Swift.h不可见,但调用时可像查看系统类的方法查看(在OC中调用swift文件)


    经实验发现:

    a.无论怎么改变,桥接文件的名字都是跟工程名保持一致.但是该文件是可以单独创建,进行配置的.具体操作步骤:创建一个头文件,然后模仿"工程名-Bridging-Header.h"的形式命名,再查找target-->buildSetting--(输入swift),在Bridging Header中进行设置(一般还是建议使用系统自己创建)

    b.生成的不可见文件imooc-Swift.h名字是受Product Module Name影响的.该文件不建议自己创建,所以需要自定义的一定在使用之前先设置好Product Module Name.


    2.OC与swift文件的真正混用

    实验条件可以忽略,但是为了避免不必要的麻烦,建议看了实验结果再往下走:

    1)target-->buildSetting--(输入packaging)-->设置Product Module Name (也可不设置,默认是系统的)


    moduleName


    2)在OC中首次创建swift或者在swift中首次创建OC,弹出提示,是否创建桥接文件

    提示是否创建桥接文件

    点击确定,则会生成两个文件:

    TimingUsingPickerView-Bridging-Header.h 以工程名命名的桥接文件,可见

    imooc-Swift.h 不可见,在target-->buildSetting--(输入swift)进行查看


    3)swift与OC的混用

      a.在swift中使用OC的文件

    在自动创建的桥接文件TimingUsingPickerView-Bridging-Header.h中,依次导入swift文件中需要使用的类,然后就可以使用了,不过在swift文件中得按swift的规则写了

    导入需要的OC文件


     b.在OC中使用swift的文件

    在OC中导入系统自动生成的imooc-swift.h文件(不能直接查找到该文件,但是可以像查看系统类的方法点击进入查看) ,就可以使用创建的swift文件,"...-swift.h"/"...-Swift.h"都可以

    导入系统创建的文件


    3.swift调用OC中的一些坑

    OC 中宏定义 如果只是值类型等简单的宏定义,swift也可直接调用,但是如果是比较复杂的方法,swift就只能呵呵了,这个时间建议创建方法可以使用swift中的延展extension

    1)swift中简单宏使用如:

    OC中简单宏定义
    swift中调用简单宏


    2)swift中不能使用OC中复杂的宏如:

    OC中复杂的宏

    当不能使用的时候,就需要写成方法供swift使用,可以创建一个swift文件,然后添加需要的延展,如下图:

    UIColor的延展
    swift方法中方法的调用


    3)创建的swift类,必须继承自NSObject或者NSObject的派生类,否则编译后不会生成对应的转换类,接下来验证一下(此处感谢  @小杰杰杰提示😊)

    a.首先创建一个Person类,不继承NSObject

    未继承NSObject的Person类


    在OC中TestViewController.m中使用,记得引入"工程名-swift.h",出现如下图的提示,此处按住"command"键,点击Person,进入到刚刚创建的Person类(见上图)

    OC中使用未继承NSObject的Person类(swift编写)


    b.现在修改原来的Person类,继承NSObject,如下图,修改后要"command+B"编译一下才能看到变化

    继承NSObject的Person类


    同样在OC中TestViewController.m中使用,记得引入"工程名-swift.h",未报错,如下图:

    OC中使用继承NSObject的Person类(swift编写)


    此时,按住"command",点击Person进入,此处有惊喜,如下图:

    swift编写的Person类对应的转换类.可以互相调用,玄机就在这里❗️

    4)创建的swift类中,写了一个枚举,不继承NSObject,此时定义一个该枚举类型的变量,发现桥接文件中没有生成相应的属性,解决办法:定义枚举时需要手动添加添加@objc,如下:

    swift中定义枚举类型的变量


    看来使用OC与swift混编还是有点限制的,使用时需谨慎,不过,这些也已经够平时使用了


    小结:swift和OC混用,坑还是很多的,埋坑是个体力活,常运动是个好习惯...

    以上仅是个人使用总结,欢迎批评指正补充~~~~~~~

    展开全文
  • 1.你认为cinder与swift区别是什么? 2.cinder是否存在单点故障? 3.cinder是如何发展而来的? 在openstack中,我们经常遇到这么个问题,cinder与swift的区别是什么? cinder与swift各自的用途是什么?
  • 类目和延展

    2014-03-31 19:29:45
    比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现。 @interface NSMutableArray (Sort) //为NSMutableArray类添加Sort方法,Sort就是类目名,做到见名知意 -(void)invert;//方法 @end ...
  • Swift4.1 第一章

    2018-06-20 10:48:26
    欢迎使用Swift 关于Swiftswift来写代码是一种很棒的方式,不管是手机、电脑客户端服务端或者是其他别的都可以用swift代码来运行。她是一种安全快速 交互式的编程语言,结合了现代优秀编程语言的最佳思维,从...
  • Swift 2.0版本中,Swift语言对其错误处理进行了新的设计,当然了,重新设计后的结果使得该错误处理系统用起来更爽。今天博客的主题就是系统的搞一下Swift中的错误处理,以及看一下Swift中是如何抛出异常的。在编译...
  • 问题导读1.你认为cinder与swift区别是什么?2.cinder是否存在单点故障?...cinder是块存储,用来给虚拟机挂扩展硬盘,就是将cinder创建出来的卷,挂到虚拟机里。cinder是OpenStack到F版,将之前在Nova中...
  • 窥探Swift编程之错误处理与异常抛出
  • 在 iOS 开发中,颜色设置大致有两种方式,一种是在Storyboard或 XIB 中通过颜色色板设置,另一种是出代码中通过 UIColor 这个类来设置,下面我总结下平时颜色设置的常用方法和一些技巧一、iOS 颜色色板介绍在iOS开发...
  • 随着iOS10的发布,苹果对开发者开放了Messages应用程序,开发人员现在可以创建他们自己的各种类型 并且可以内联iMessage内容的 iMessage apps,包含简单的表情包到可以交互的复杂界面。 在这个教程中, 我将会为你介绍...
  • Swift中可选类型(Optionals),用 " ? " 号表示, 用于处理值缺失的情况. 表示"该处有一个值, 切它等于X", 或者表示"该处没有值" 二. 可选类型是一个包含两种情况的枚举值: None 和 Some , 用来表示可能有值(Some)...
  • Swift4.1第一章翻译

    2019-03-26 01:06:12
    欢迎使用Swift 关于Swiftswift来写代码是一种很棒的方式,不管是手机、电脑客户端服务端或者是其他别的都可以用swift代码来运行。她是一种安全快速 交互式的编程语言,结合了现代优秀编程语言的最佳思维,从更加...
  • 因为这几天上传迭代版本,所以总是浏览苹果开发者中心,发现最近开发者中心网站的更新频率挺大啊,主页放上了wwdc(世界开发者大会),亮点是Swift代码。所以趁着这几天空闲期抓紧恶补了一下Swift,把这几天的心得...
  • 我们在重构代码时,往往会用到设计模式,文章的案例主要是来自《Head First Design Patterns》或者是参考其他博主的案例,需要下载pdf文件的,可以点击这个链接: 链接: 《Head First Design Patterns》中文pdf ...
  • JavaScriptCore简介  iOS 7中加入了JavaScriptCore框架,该框架让Objective-C和JavaScript代码直接... API,用于建立JavaScript与 Swift or Objective- C的桥梁。该框架允许我们在基于Swift or Objective- C的
1 2 3 4 5 ... 8
收藏数 148
精华内容 59
关键字:

swift 新建延展文件