
Swift
csdn_Levy
这个作者很懒,什么都没留下…
展开
-
什么是函数式编程?
函数式编程:数学意义上的函数,即映射关系(如:y = f(x),就是 y 和 x 的对应关系,可以理解为"像函数一样的编程")。它的主要思想是把运算过程尽量写成一系列嵌套的函数调用。面向对象编程:将要解决的问题抽象成一个类,通过给类定义属性和方法,让类帮助我们解决需要处理的问题(即命令式编程,给对象下一个个命令)。接近自然语言,易于理解;代码简洁,开发迅速;原创 2024-10-31 10:54:12 · 311 阅读 · 0 评论 -
【无标题】
flatMap:已弃用:4.1,重命名为:“compactMap(_:)”,消息:“对于闭包返回可选值的情况,请使用compactMap。compactMap :函数会自动过滤掉映射结果为nil或者无效的值,只保留非空的映射结果。flatMap:可以自动解包。特殊表达式可以去nil。原创 2024-10-31 10:53:38 · 140 阅读 · 0 评论 -
什么是柯里化?
柯里化:把接受多个参数的函数变成接受一个单一参数(最初函数的第一个)的函数,并且返回接受余下的参数和返回结果的新函数。原创 2024-10-31 10:52:25 · 360 阅读 · 0 评论 -
作用域关键字的区别
internal (默认值) 只能访问自己module(模块)的任何internal实体,不能访问其他模块中的internal实体.. public 类似于final,可以被其他module被访问,不可以被重载和继承.. private 只可以在本类而且在同一个作用域中被访问.. open 可以被其他module被访问、被重载、被继承.. fileprivate 可以在本类中进行访问.原创 2024-10-31 10:51:31 · 202 阅读 · 0 评论 -
swift 中 closure闭包 与 OC 中 block 的区别?
2、closure 可以通过逃逸闭包来在内部修改变量,block 通过 __block 修饰符。1、closure 是匿名函数,block 是一个结构体对象。相同点:都是一段可以执行的代码块。原创 2024-10-31 10:49:26 · 346 阅读 · 0 评论 -
extension 中能增加存储属性吗?
extension是用来给存在的类型添加新行为的并不能改变类型或者接口本身。因为 extension 不能为类或结构体增加实际的存储空间。extension :可以增加计算属性,不能增加存储属性。(swift 没有分类的概念 只有extension扩展)原创 2024-10-31 10:48:40 · 285 阅读 · 0 评论 -
存储属性、计算属性和类型属性的区别?
存储属性用来进行数据的存储, 需要分配内存空间。子类(无论是let var static修饰)不能直接重写存储属性。重写(Override)通常用于子类覆盖父类的方法、计算属性或观察者。oc需要添加属性关键字class定义类型属性(更像是通过调用属性来调用一个方法,比较像计算属性,oc中无法真正存储值。swift类型属性:使用static、 class来定义。static(不支持重写) class(支持子类重写)。计算属性:用来定义计算的过程, 不需要分配空间.计算属性必须使用var关键字进行定义。原创 2024-10-31 10:47:57 · 316 阅读 · 0 评论 -
try、try?、try
try”需要用“ do catch”捕捉异常,如果在“try”代码块中出现异常,程序会跳转到相应的“catch”代码块中执行异常处理逻辑,然后继续执行“catch”代码块后面的代码。”是返回一个可选值类型,如果“try?”代码块中出现异常,返回值会是“nil”,否则返回可选值。可以在运行时判断是否有异常发生。”类似于可选型中的强制解包,它不会对错误进行处理,如果“try!”代码块中出现异常,程序会在异常发生处崩溃。原创 2024-10-31 10:47:06 · 198 阅读 · 0 评论 -
swift的派发机制(函数的派发机制:静态派发(直接派发)、函数表派发、消息派发)?
swift中NSObject的子类用@nonobjc或final修饰的函数使用直接派发,初始声明函数使用函数表派发,dynamic修饰的extensions使用消息派发。swift中class中extensions使用直接派发,初始化声明函数使用函数表派发,dynamic修饰的函数使用消息派发。swift中协议的extensions(扩展)使用直接派发,初始声明函数使用函数表派发。5)添加@inline关键字的函数告诉编译器可以使用直接派发。1)添加final关键字的函数使用直接派发。原创 2024-10-31 10:45:24 · 563 阅读 · 0 评论 -
什么是Optional(可选项或者叫可选类型)?
在Swift中,nil不是指针,而是值缺失的一种特殊类型,任何类型的可选项都可以设置为nil而不仅仅是对象类型,Swift 是一种类型安全的语言,而 Objective-C 不是。的 nil 是不同的,它们所代表的空值的类型不同。底层Optional是一个包含None和Some(Wrapped)两种类型的泛枚举类型,Optional.None即nil,Optional.Some非nil。在OC中, nil是一个指向不存在对象的指针(OC非对象类型也可以设置成nil但是会有警告⚠️:指针不兼容)原创 2024-10-31 10:44:16 · 424 阅读 · 0 评论 -
什么是自动闭包、逃逸闭包、非逃逸闭包?
使用 Autoclosure,我们可以将闭包作为参数传递给函数或方法,但是闭包不会立即执行。相反,它会在需要时才会被执行。当一个闭包作为参数传到一个函数中,但是这个闭包在函数返回之后才被执行,我们称该闭包从函数中逃逸。在形式参数前写@escaping来明确闭包是允许逃逸的。自动闭包:是一种自动创建的闭包,用来把作为实际参数传递给函数的表达式打包的闭包.他不接受任何实际参数,并且当它被调用时,它会返回内部打包的表达式的值.非逃逸闭包, 永远不会离开一个函数的局部作用域的闭包就是非逃逸闭包。原创 2024-10-31 10:43:05 · 295 阅读 · 0 评论 -
In-Out(inout关键字)参数
默认情况下,函数参数默认是常量,试图从函数体中去改变一个函数的参数值会报编译错误。如果希望函数修改参数值,并在函数调用结束后仍然保留。将副本的内存地址传入函数 (副本进行引用传递),在函数内部可以修改副本的值。inout关键字只能修饰变量,无法修饰常量,因为常量和字面量不能被修改。调用函数的时候,应该在变量名前放置&符号表示该变量可以由函数修改。答: 直接将实参的内存地址传入函数 (实参进行引用传递)调用该函数时,先复制实参的值,产生副本 [get]函数返回后,再将副本的值覆盖实参的值 [set]原创 2024-10-31 10:40:41 · 303 阅读 · 0 评论 -
Any和AnyObject的区别?
(延伸 oc中 id的本质是struct objc_object结构体指针,可以指向任何OC对象,id指向基础数据类型会报编译错误。AnyObject只能表示引用类型的任何实例,相当于Objective-C中的id类型。Any可以表示类,结构体,枚举的任何实例。AnyObject是Any的子集。原创 2024-10-31 10:32:54 · 346 阅读 · 0 评论 -
指定构造器和便利构造器有什么区别?
便利构造器必须调用本类另一个构造器,最终调用到本类的指定构造器。便利构造器前面需要添加convenience关键字。类必须要有一个指定构造器,可以没有便利构造器。原创 2024-10-31 10:32:19 · 104 阅读 · 0 评论 -
Swift中的常量和OC中的常量有啥区别?
使用#define定义的常量在编译时会被替换为它们的值,而使用const定义的常量在运行时不可修改。而 Swift 中 let 只是表明常量(只能赋值一次),其类型和值既可以是静态的,也可以是一个动态的计算方法,它们在 runtime 时确定的。Swift中的常量可以是非特定类型的,即它们的类型可以在运行时确定。例如,你可以定义一个常量,其值可以是任何类型,只要在赋值时类型明确即可。OC中的常量(const)是编译期决定的,Swift中的常量(let)是运行时确定的。原创 2024-10-31 10:23:14 · 272 阅读 · 0 评论