1:类和结构体定义
类和结构体分别通过关键字class 和struct定义。
swift的编码风格是类class和结构体struct名字使用大写字母开头的匈牙利表示法,相反的。类的方法和属性则用小写字母开头的匈牙利表示法。
结构体总是通过被复制而进行代码传递的。
struct SForm{ var iXX:Int = 99 var strHello:String = "dsf" func testFunc(iXX:Int)->Int{ return iXX+1 } } class CTset{ var iAge:Int = 9 var strName:String = "xx" func testFunction(iAge:Int)->Int{ return iAge+1 } func testFunctionName(strName:String)->String{ return "oo"+strName } }
2:类和结构体实例
var structObj = SForm() structObj.iXX = 988 let iRes = structObj.testFunc(4)
let clsObj = CTset() clsObj.iAge = 987 let iRe:Int = clsObj.testFunction(32) let iStr:String = clsObj.testFunctionName("sdf")
3:结构体初始化
结构体有一个自动生成的初始化器。新实例中各个属性的初始值可以通过属性的名称传递到成员逐一初始化器之中。
var objFirst = SForm(iXX:983, strHello:"hel") objFirst.iXX = 87
let objSecond = SForm(iXX:94, strHello:"hwxel")
//objSecond.iXX = 876 error
4:结构体是值类型
var objFirst = SForm(iXX:983, strHello:"hel") var objSecond = objFirst objSecond.iXX = 5775 println("objFirst: \(objFirst.iXX) objSecond:\(objSecond.iXX)")
输出:objFirst: 983 objSecond:5775
5:类是引用类型。
let clsObj = CTset() clsObj.iAge = 987 var clsObjEx:CTset = clsObj clsObjEx.iAge = 874 println("\(clsObj.iAge) \(clsObjEx.iAge)")
输出:clsObj: 874 clsObjEx: 874
6:类的等价于运算=== 与不等价于 !== 运算 。表示是否是引用到同一个类对象
let clsObj = CTset() clsObj.iAge = 987 var clsObjEx:CTset = clsObj clsObjEx.iAge = 874 if clsObj === clsObjEx { println("obj same") }
7:类和结构体区别。结构体是值类型,结构体的赋值意味着拷贝行为的发生。而类是引用类型。
8:集合类型的赋值和拷贝行为。
swift的数组和字典都是以值类型传递的。
8.1字典的拷贝。当有字典实例的赋值或者是字典做参数的函数调用时候,字典即发生拷贝行为。字典的key和value的拷贝行为是依赖于她自身到底是引用属性还是值类型。
var dicFirst:Dictionary = ["key1":"value1", "key2":"value2"] var dicSecond:Dictionary = dicFirst dicSecond["key1"] = "value1Update"
dicSecond的值被更新,而dicFirst的值依然保持不变。dicFirst和dicSecond是两个独立的字典。它的key和value在赋值时候发生了拷贝,因为都是String类型。
class CTset{ var iAge:Int = 9 var strName:String = "xx" func testFunction(iAge:Int)->Int{ return iAge+1 } func testFunctionName(strName:String)->String{ return "oo"+strName } } var clsObjFirst = CTset() clsObjFirst.iAge = 443 var dicFirst:Dictionary = ["key1":clsObjFirst] var dicSecond:Dictionary = dicFirst两个字典dicFirst 和 dicSecond分别为不同的字典,但它的值 clsObjFirst的地址却是同一个。因为它是类类型,是引用传递。
8.2数组的赋值与拷贝。数组的拷贝行为只有在数组的长度发生变化的时候才会拷贝。当然数组里面的内容,是要遵循引用类型还是值类型的。
var arrayFirst = [1, 33] var arraySecond = arrayFirst arraySecond[0] = 89 //arrayFirst[0]和arraySecond[0] 都会被修改成 89 因为数组长度没变化,所以没发生拷贝
var arrayFirst = [1, 33] var arraySecond = arrayFirst arrayFirst.append(222)//长度变化,arrayFirst拷贝,独立另外一个数组 arrayFirst[0] = 99 println("first:\(arrayFirst)\nsecond:\(arraySecond)") 输出: first:[99, 33, 222] second:[1, 33]
在用多个变量(var)引用一个数组时候,可以用unshare()方法,强制拷贝数组。
var arrayFirst = [1, 2] var arraySecond = arrayFirst var arrayThird = arrayFirst arraySecond.unshare()//拷贝独立成另外个数组 arrayThird.unshare()//拷贝独立成另外个数组 arrayFirst[0] = 3 arraySecond[0] = 4 arrayThird[0]=5 println("first:\(arrayFirst)\nsecond:\(arraySecond) \nthird:\(arrayThird)") 输出: first:[3, 2] second:[4, 2] third:[5, 2]
8.3 数组等价于(===)和不等价于(!==)
8.4强制复制数组
通过copy强制复制数组,进行的是数组类容浅拷贝,并返回个新的数组引用。
var arraySource = [1, 2, 3] var arrayCopy = arraySource.copy() arraySource[0] = 4 arrayCopy[1] = 5 println("source:\(arraySource)\n copy:\(arrayCopy)") 输出: source:[4, 2, 3] copy:[1, 5, 3]
相关推荐
在 Swift 编程语言中,类(Class)和结构体(Structure)是两种用于创建自定义数据类型的核心构造。尽管它们在功能上有许多相似之处,但它们之间也存在一些关键的区别,这些区别影响着开发者在不同场景下的选择。...
在Swift编程语言中,类(Class)和结构体(Structure)是两种主要的复合数据类型,它们用于封装数据和功能。本视频教程针对初学者,深入浅出地讲解了这两者的基本概念、特点以及如何在实际开发中使用它们。 首先,...
在Swift编程语言中,类(Class)和结构体(Structure)是两种主要的数据类型,用于组织和封装数据以及相关的操作。它们都是复合类型,可以包含属性(Properties)、方法(Methods)、下标(Subscripts)以及初始化器...
Swift 结构体提供了强大的工具来组织和操作数据。通过定义属性和方法,结构体可以成为一个功能丰富的数据容器。此外,由于结构体的值传递特性,使得它们非常适合于那些需要在赋值或传递时拷贝数据的情况。理解结构体...
在这个项目中,你将看到如何通过创建自定义的Swift类和结构体来定义事件、地点等核心模型。 Swift的语法简洁明了,比如它的可选类型系统,可以防止空指针异常。在`e-Where`项目中,当你处理可能为空的数据时,如...
例如,如果你有一个名为`User`的Swift结构体,你可以定义一个协议`JsonConvertible`,然后实现其中的方法来使`User`结构体支持Jsonify: ```swift struct User: JsonConvertible { let name: String let email: ...
WSLTransferAnimation-master这个库中,可能包含了一系列的Swift类和结构体,它们实现了各种自定义转场动画的效果。比如,常见的有淡入淡出、推拉、旋转、缩放、模糊等效果。开发者可以通过导入这些类并进行适当的...
总的来说,`swift代码-结构体的运用`这个主题涵盖了Swift编程中的一个重要方面,即如何利用结构体来组织和操作数据。通过学习和实践,开发者可以更好地理解和应用这一核心概念,提高代码的可读性和效率。
结构体和枚举是值类型,这意味着在赋值或传递时,它们的副本会被创建。例如,当 `cinema` 被重新赋值时,`hd` 的值不会受到影响。 相反,类定义使用 `class` 关键字,如 `VideoMode` 示例所示。类实例可以通过赋值...
在创建自定义导航栏时,我们将使用Swift类和结构体来定义导航栏的外观和行为。 在实现过程中,我们可能要创建一个新的UIView子类来代表自定义导航栏。这个类将包含设置背景颜色、标题、按钮等属性的方法。例如: `...
1. 源代码:项目的核心解析器代码,可能包括Swift类和结构体,用于解析RSS feed的XML结构。 2. 示例或测试:演示如何使用TIFeedParser的代码,帮助新用户快速上手。 3. 文档:可能包含README文件,解释了项目的用途...
2. **Swift类和结构体**:可能包括自定义的视图控制器、视图和其他UI元素,以及处理业务逻辑的对象。 3. **Auto Layout和Size Classes**:用于适应不同屏幕尺寸和方向的界面布局技术。 4. **动画**:可能使用`UIView...
Swift 语言还提供了继承机制,允许类和结构体继承其他类或结构体的属性和方法。 在 Swift 语言中,下标是用于访问集合类型的元素的语法结构。下标可以是整数、字符串或其他类型,用于指定集合类型的元素。 Swift ...
Swift是一种强大的编程语言,它支持面向对象编程以及面向过程编程,这主要体现在它同时提供了类(Class)和结构体(Struct)两种数据类型。这两者有很多相似之处,但也有本质的区别,选择使用哪种取决于具体需求。 ...
7. **结构体与类**:Swift中的结构体和类都支持方法、属性和初始化器,但结构体是值类型,类是引用类型,这影响了它们的复制和赋值行为。 8. **自动引用计数(Automatic Reference Counting, ARC)**:Swift使用ARC...