首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Swift vs. Kotlin 漫谈系列之类与继承

技术漫谈 Kotlin: Swift 君,你好。? Swift: Kotlin 君,你好。?,干嘛笑那么坏。 Kotlin: 没有什么,你最近是不是胖了。? Swift: ?...Swift: Swift 中储值属性不能覆盖,只能覆盖父类计算属性,同样需要加上 override 关键字,不过属性覆盖用不是很多。...Kotlin: Swift 如果实现多个接口,会不会有不同协议带来同名函数冲突问题。?...Swift: Swift 没有内部类概念。? Kotlin: ?你们没有抽象类,也没有内部类,不过你们协议好像有很多玩法。下次听你给我好好讲讲你们协议怎么样Swift: ?...} }class SomeClass: BaseClass { } 子类会获得父类非 private 属性和方法 let instance = SomeClass() instance.baseFunction

3.6K40

19.Swift学习之构造函数与析构函数

Swift 为类类型定义了两种构造函数以确保所有的存储属性接收一个初始值。这些就是所谓指定构造函数和便捷构造函数 指定构造函数主要构造函数。...类类型构造函数委托 构造函数继承与重写 在Swift中,子类构造函数有两种来源,首先是自己拥有的构造函数,其次从父类中继承过来构造函数。但是,比不是所有父类构造函数都能够被子类继承。...子类继承父类构造函数有条件,遵守以下2个规则: 规则1——如果子类没有定义任何指定初始化器,它会自动继承父类所有的指定初始化器 规则2——如果子类提供了所有父类指定初始化器实现——要么通过规则...required 修饰符来表明所有该类子类都必须实现该构造函数 当子类重写父类必要构造函数时,必须在子类构造函数前添加 required 修饰符以确保当其它类继承该子类时,该构造函数同为必要构造函数...SomeClass { required init() { } } 析构函数 Swift 会自动释放不再需要实例以释放资源 Swift 通过自动引用计数(ARC)处理实例内存管理

99530
您找到你想要的搜索结果了吗?
是的
没有找到

Swift基础 方法

翻译自:https://docs.swift.org/swift-book/LanguageGuide/Methods.html 方法与特定类型关联函数。...在 Swift 中,您可以选择定义类、结构还是枚举,并且仍然可以灵活地定义您创建类型上方法。 实例方法 实例方法属于特定类、结构或枚举实例函数。...Counter三个实例方法中使用count(不是self.count)证明了这一假设。 当实例方法参数名称与该实例属性具有相同名称时,就会出现此规则主要异常。...但是,您在类型上调用类型方法,不是该类实例上调用类型方法。...implementation goes here ​ } } SomeClass.someTypeMethod() 在类型方法主体中,隐式self属性指类型本身,不是该类实例。

7000

18.Swift学习之属性与方法

属性介绍 Swift属性有多种 存储属性:存储实例常量和变量 计算属性:通过某种方式计算出来属性属性:与整个类自身相关属性 存储属性 存储属性最简单属性,它作为类实例一部分,用于存储常量和变量...getter和一个可选setter来间接获取和设置其它属性 计算属性一般只提供getter方法 如果只提供getter,不提供setter,则该计算属性为只读属性,并且可以省略get{} 下面计算属性写法...} } } // 获取计算属性值 print(stu.averageScore) 类属性属性与类相关联不是与类实例相关联 所有的类和实例都共有一份类属性.因此在某一处修改之后,...该类属性就会被修改 类属性设置和修改,需要通过类来完成 下面属性写法 类属性使用static来修饰 courseCount属性,用来记录学生有多少门课程 class Student : NSObject...// 在OC中通过重写set方法 // 在swift中,可以给属性添加监听器 p.name = "why" //p.name = "yz" 属性继承与重写 属性继承:子类可以继承父类属性,包括存储属性

54730

Swift基础语法(三)

属性介绍 在Swift类中,属性分为如下三种: 存储属性:用于存储类实例常量和变量 计算属性:通过某种方式计算出来属性属性:与整个类自身相关属性 一、存储属性 存储属性最简单属性...return (chineseScore + mathScore)/2 } 三、类属性属性与类相关联不是与类实例相关联。...但是在Swift中,我们属性声明前使用lazy关键字来表示该属性延迟加载(即懒加载)。...Swift中,类类型构造函数委托有如下三个规则: 1,在某类指定构造函数最后,必须调用其父类指定构造函数 2,一个类便捷构造函数,必须调用该类里面的另外一个构造函数(可以是指定,也可以是便捷...面向协议编程 众所周知,Swift一门面向协议编程语言。我所理解面向协议编程这样:针对某个需要实现功能,可以使用协议定义出接口,然后利用协议拓展为其提供默认实现。

1.9K40

Swift基础语法简化版(续)

与C/OC不同一点Swift枚举成员在被创建时候不会被赋予一个默认整数值。比如上面的这个例子中,East、West、North和South不是隐式等于0、1、2、3。...OC中NSString、NSArray和NSDictionary,他们作为类来实现,所以NSString、NSArray和NSDictionary实例对象总是作为一个引用,不是拷贝来实现赋值和传递...+ mathScore)/2 } 三、类属性属性与类相关联不是与类实例相关联。...所有的类和实例都共有一份类属性,因此在某一处修改之后,该类属性就会被修改。 类属性设置和修改需要通过类来完成。...但是在Swift中,我们属性声明前使用lazy关键字来表示该属性延迟加载(即懒加载)

1.5K20

【读书笔记】The Swift Programming Language (Swift 4.0.3)

Subscripts * subscript 一个新语言特性,不是简单函数重写. * subscript 可以接收多个参数 * subscript 参数和返回值,可以完全自定义 Inheritance...* 可以通过 super 来使用父类方法或属性. * 可以在方法或属性前加 final 关键字,来禁止被子类重写. * 可以在类前加 final 关键字,来禁止被继承..... * extentsion 扩展东西,可以被子类继承....Protocols * 在swift 设定中, protocol 也属于 type,可以用于任何 type 适用场景. * 在类型声明遵循某协议以外位置,书写符合协议方法,用 & 连接多个协议...,如 AP&BP&CP. * protocol 可以在 extension 中定义自己方法,任意遵循此协议类型实例都可以调用此协议自己方法实现. --> 可以在 extension 实现协议规定属性或方法默认实现

1.5K100

Swift基础 协议

game参数具有DiceGame类型,不是SnakesAndLadders,因此gameDidStart(_:)只能访问和使用作为DiceGame协议一部分实现方法和属性。...您可以通过将AnyObject协议添加到协议继承列表中来将协议采用限制为类类型(不是结构或枚举)。...编写试图采用SomeClassOnlyProtocol结构或枚举定义一个编译时错误。 注意 当该协议要求定义行为假设或要求符合类型具有参考语义不是值语义时,请使用仅类协议。...这允许您定义协议本身行为,不是在每种类型单个一致性或全局函数中。...协议继承总是在协议声明本身中指定。 提供默认实现 您可以使用协议扩展为该协议任何方法或计算属性要求提供默认实现。如果符合类型提供了自己实现所需方法或属性,则将使用该实现不是扩展提供实现。

11500

Swift基础 初始化

注意 如果属性总是具有相同初始值,请提供默认值,不是在初始化器中设置值。最终结果相同,但默认值将属性初始化与其声明更紧密地联系起来。它使初始化器更短、更清晰,并使您能够从其默认值推断属性类型。...您可以从上面修改SurveyQuestion示例,为问题text属性使用常量属性不是变量属性,以表明一旦创建了SurveyQuestion实例,问题不会改变。...类继承和初始化 类所有存储属性,包括该类从其超类继承任何属性,在初始化期间必须分配初始值。 Swift为类类型定义了两种初始化器,以帮助确保所有存储属性都收到初始值。...Swift方法防止了超类简单初始化器被更专业子类继承,并用于创建未完全或正确初始化子类新实例。 注意 在某些情况下,超类初始化器继承,但只有在安全且合适情况下才会继承。...这告诉Swift立即执行关闭。如果您省略这些括号,您将尝试将闭包本身分配给属性不是闭包返回值。 注意 如果您使用闭包初始化属性,请记住,在执行闭包时,实例其余部分尚未初始化。

12700

iOS工程师必看 20 道 面试题

不同之处strong复制多个指针指向同一个地址,copy复制每次会在内存中拷贝一份对象,指针指向不同地址。...Swift 中,类引用类型,结构体值类型。值类型在传递和赋值时将进行复制,引用类型则只会使用引用对象一个"指向"。所以他们两者之间区别就是两个类型区别。...说 Swift 函数式编程语言,是因为 Swift 支持 map, reduce, filter, flatmap 这类去除中间状态、数学函数式方法,更加强调运算结果不是中间过程。 10....如果该类NSObject子类,那么Swift会在非private方法或属性前自动加上@objc。 17....runtime执行编译后代码,这时它可以动态加载对象、添加方法、修改属性、传递信息等等,runtime运行机制就是Objective-C动态特性。 Swift目前被公认为一门静态语言。

3.6K40

Swift基础 访问控制

如果您将类型访问级别定义为内部或公共(或使用内部默认访问级别,不显式指定访问级别),则该类型成员默认访问级别将是内部。 重要 公共类型默认为有内部成员,不是公共成员。...如果您希望公共类型中嵌套类型公开可用,则必须显式声明嵌套类型为公共类型。 子分类 您可以对可以在当前访问上下文中访问任何类进行子类该类子类在同一模块中定义。...例如,您可以定义一种公共类型,该类型可以在其他模块中使用,但其与内部协议一致性只能在内部协议定义模块中使用。 类型符合特定协议上下文类型访问级别和协议访问级别的最低值。...例如,如果一种类型公开,但它遵守协议内部,则该类型与该协议一致性也是内部。...当您编写或扩展类型以符合协议时,您必须确保该类型对每个协议要求实现至少与该类型对该协议一致性具有相同访问级别。例如,如果公共类型符合内部协议,则该类型对每个协议要求实现必须至少内部

12000

Swift协议(Protocol)

某个类型能够满足某个协议要求,就可以说该类型遵循这个协议。...协议作为类型使用,有时被称作「存在类型」,这个名词来着存在着一个类型T,该类型遵循协议T。...这里顺序,如果不够存储就直接开辟内存空间,存储值,记录指针。不是先存储不够了在开辟内存空间。...总结 ---- 至此我们对Swift协议分析就结束了,现总结如下: Swift中类、结构体、枚举都可以遵守协议 遵守多个协议使用逗号(,)分隔 有父类,父类写在前面,协议在后面用逗号(,)分隔 协议中可以添加属性...属性可以是实例属性和类型属性 属性需要使用var修饰,不能属于let 类型属性只能使用static修饰,不能使用class 我们需要声明属性必须可读或者可读可写 协议中可以添加方法 可以是实例方法或类方法

94140

iOS面试题-Swift

class 有以下功能,struct 没有的:* class可以继承,子类可以使用父类特性和方法 类型转换可以在运行时检查和解释一个实例对象 class可以用 deinit来释放资源 一个类可以被多次引用...值类型和引用类型相比,最大优势可以高效使用内存,值类型在栈上操作,引用类型在堆上操作,栈上操作仅仅是单个指针移动,堆上操作牵涉到合并,位移,重链接,Swift 这样设计减少了堆上内存分配和回收次数...在协议和方法前面添加 @objc,然后在方法前面添加 optional关键字,改方式实际上协议转为了OC方式@objc protocol someProtocol { @objc optional...required强制子类重写父类中所修饰初始化方法比较 Swift和OC中 protocol 有什么不同?...Swift 和OC中 protocol相同点在于: 两者都可以被用作代理; 不同点: Swift protocol还可以对接口进行抽象,可以实现面向协议,从而大大提高编程效率,Swiftprotocol

3.5K40

Swift 面向对象解析(二)

接着上面一篇说内容: 一 继承:      苹果继承与水果,苹果水果子类,则苹果一种特殊水果;这就是继承关系,这个我们学OC时候相信也都理解了,就不再描述定义了,下面的就叫继承: class...二:类构造与析构 由于类继承,子类不仅包括了自己定义存储属性,还包括从父类继承得到存储属性,类所有存储属性,包括所有的继承父类属性,在构造过程中必须设置初始值,因此类构造过程相对比较复杂...Swift学习笔记(十一)--拓展和协议 Swift协议和扩展 六  协议Swift 协议作用类似于 OC中协议,其实OC协议你理解的话,这里也就没多少需要在强加去解释。...协议基本用法我以前博客当中也有说过 Swift 2.2 协议和代理          顺便指出,可选协议这一点,其实也挺简单,你在这些属性、方法、下标等想让它是可选,让它加上 optional...可选,看字面意思大家也可想而知了,并不一定是遵守了这个协议之后必须要实现方法和属性就叫可选。 七:封装         封装面向对象额三大特性之一,两外两个继承和多态。

94070

Swift基础 属性

存储属性将常量和变量值存储为实例一部分,计算属性计算(不是存储)值。计算属性由类、结构和枚举提供。存储属性仅由类和结构提供。 存储和计算属性通常与特定类型实例相关联。...对于您定义计算属性,请使用属性设置器来观察和响应值更改,不是尝试创建观察者。重写属性在重写中描述。 您可以选择在属性上定义以下一个或多个观察者: willSet在存储值之前调用。...由于属性包装器不允许值高于12,因此将myNumber设置为12不是24。 类型属性 实例属性属于特定类型实例属性。每次您创建该类新实例时,它都有自己属性值集,与任何其他实例分开。...您还可以定义属于类型本身属性不是该类任何实例。无论您创建多少个此类实例,这些属性都将只有一个副本。这些类型属性称为类型属性。...查询和设置类型属性 类型属性使用点语法查询和设置,就像实例属性一样。但是,类型属性在类型上查询和设置不是该类实例上。

20800

Swift基础 通用

如果您需要在自己代码中使用swapTwoValues(_:_:)函数行为,您可以使用Swift现有的swapswap(_:_:)函数,不是提供自己实现。...注意 始终给出类型参数上骆驼大小写名称(如T和MyTypeParameter),以指示它们类型不是占位符。 通用类型 除了通用函数外,Swift还允许您定义自己通用类型。...第一个类型参数T有一个类型约束,要求TSomeClass子类。第二个类型参数U有一个类型约束,要求U符合协议SomeProtocol。...请注意,此函数返回类型仍然Int?,因为该函数返回可选索引号,不是数组中可选值。...例如,这是非genericIntStack类型扩展,该类型添加了SuffixableContainer一致性,使用Stack作为其后缀类型,不是IntStack: 1. extension

8300

Swift教程(九)--类和结构体

本次教程基于Swift5.1版本 类和结构体一种多功能且灵活构造体。通过使用与现存常量、变量、函数完全相同语法来在类和结构体当中定义属性和方法以添加功能。...这是 MyClass x参数在改变不是引用 MyClass常量值在改变。 特征运算符 因为类引用类型,在后台有可能有很多常量和变量都是引用到了同一个类实例。...这种行为不同于基础库中 NSString, NSArray和 NSDictionary,它们作为类来实现不是结构体。...NSString , NSArray 和 NSDictionary实例总是作为一个已存在实例引用不是拷贝来赋值和传递。...结构体在你代码中通过复制来传递,并且并不会使用引用计数。 事实上,大部分自定义数据结构应该是类,不是结构体。

1.1K30
领券