Swift 初始化Initialization
来源:互联网 发布:cf总是网络异常 编辑:程序博客网 时间:2024/05/22 17:00
在Swift中初始化,可以是对一个类,结构体或是枚举.不像OC那样,Swift的初始化没有返回值.
初始化的基本表达式:
init() { // perform some initialization here}
1.结构体的初始化
struct Fahrenheit { var temperature: Double init() { temperature = 32.0 }}var f = Fahrenheit()print("The default temperature is \(f.temperature)° Fahrenheit")// Prints "The default temperature is 32.0° Fahrenheit"上面的初始化实在init方法里面给属性temperature设置的初始值32.0.
也可以不在init里面设置初始值:
struct Fahrenheit { var temperature = 32.0<p>}</p>
2.自定义初始化
truct Celsius { var temperatureInCelsius: Double init(fromFahrenheit fahrenheit: Double) { temperatureInCelsius = (fahrenheit - 32.0) / 1.8 } init(fromKelvin kelvin: Double) { temperatureInCelsius = kelvin - 273.15 }}let boilingPointOfWater = Celsius(fromFahrenheit: 212.0)// boilingPointOfWater.temperatureInCelsius is 100.0let freezingPointOfWater = Celsius(fromKelvin: 273.15)// freezingPointOfWater.temperatureInCelsius is 0.0上面的初始化定义了,华氏温度和摄氏温度的转换公式.
3.利用外部参数来给属性设置值
struct Color { let red, green, blue: Double init(red: Double, green: Double, blue: Double) { self.red = red self.green = green self.blue = blue } init(white: Double) { red = white green = white blue = white }}两个方法都可以在提供值得时候创建一个对象
let magenta = Color(red: 1.0, green: 0.0, blue: 1.0)let halfGray = Color(white: 0.5)
4.不使用外部参数名
struct Celsius { var temperatureInCelsius: Double init(fromFahrenheit fahrenheit: Double) { temperatureInCelsius = (fahrenheit - 32.0) / 1.8 } init(fromKelvin kelvin: Double) { temperatureInCelsius = kelvin - 273.15 } init(<span style="color:#cc0000;">_</span> celsius: Double) { temperatureInCelsius = celsius }}let bodyTemperature = Celsius(37.0)// bodyTemperature.temperatureInCelsius is 37.0上面是通过写一个下划线"_"来代替明确的外部参数名.
5.可选属性类型/初始化的时候指定常亮属性
class SurveyQuestion { var text: String var response: String? init(text: String) { self.text = text } func ask() { print(text) }}let cheeseQuestion = SurveyQuestion(text: "Do you like cheese?")cheeseQuestion.ask()// Prints "Do you like cheese?"cheeseQuestion.response = "Yes, I do like cheese."
6.默认值初始化/缺省值
class ShoppingListItem { var name: String? var quantity = 1 var purchased = false}var item = ShoppingListItem()这个类中,我们设置了quantity初始的默认值 = 1.
7.逐个成员的初始化
下面看看Rect的初始化过程.
先初始化size和point
struct Size { var width = 0.0, height = 0.0}struct Point { var x = 0.0, y = 0.0}再初始化Rect
struct Rect { var origin = Point() var size = Size() init() {} init(origin: Point, size: Size) { self.origin = origin self.size = size } init(center: Point, size: Size) { let originX = center.x - (size.width / 2) let originY = center.y - (size.height / 2) self.init(origin: Point(x: originX, y: originY), size: size) }}
let originRect = Rect(origin: Point(x: 2.0, y: 2.0), size: Size(width: 5.0, height: 5.0))// originRect's origin is (2.0, 2.0) and its size is (5.0, 5.0)
let centerRect = Rect(center: Point(x: 4.0, y: 4.0), size: Size(width: 3.0, height: 3.0))// centerRect's origin is (2.5, 2.5) and its size is (3.0, 3.0)
8.类继承和初始化
在这里提到了两个构造器,指定构造器和方便构造器,没看懂.上截图吧
从这两张图中,我们似乎也可以看出什么来.D-->D ,C-->D/C.
这个部分感觉这个东西最好玩Unnamed
class Food { var name: String init(name: String) { self.name = name } convenience init() { self.init(name: "[Unnamed]") }}这个类的初始化
let namedMeat = Food(name: "Bacon")// namedMeat's name is "Bacon"看,这里就显示了Unnamed的作用可,可以自定把对象的名字获取.
方便构造器的初始化有个关键字:convenience.
下面这类,继承自Food
class RecipeIngredient: Food { var quantity: Int init(name: String, quantity: Int) { self.quantity = quantity super.init(name: name) } override convenience init(name: String) { self.init(name: name, quantity: 1) }}它的初始化过程:
有继承有C也有D了.
9.枚举的初始化
enum TemperatureUnit { case Kelvin, Celsius, Fahrenheit init?(symbol: Character) { switch symbol { case "K": self = .Kelvin case "C": self = .Celsius case "F": self = .Fahrenheit default: return nil } }}
let fahrenheitUnit = TemperatureUnit(symbol: "F")if fahrenheitUnit != nil { print("This is a defined temperature unit, so initialization succeeded.")}// Prints "This is a defined temperature unit, so initialization succeeded." let unknownUnit = TemperatureUnit(symbol: "X")if unknownUnit == nil { print("This is not a defined temperature unit, so initialization failed.")}// Prints "This is not a defined temperature unit, so initialization failed."
10.枚举带初始值的初始化
enum TemperatureUnit: Character { case Kelvin = "K", Celsius = "C", Fahrenheit = "F"} let fahrenheitUnit = TemperatureUnit(rawValue: "F")if fahrenheitUnit != nil { print("This is a defined temperature unit, so initialization succeeded.")}// Prints "This is a defined temperature unit, so initialization succeeded." let unknownUnit = TemperatureUnit(rawValue: "X")if unknownUnit == nil { print("This is not a defined temperature unit, so initialization failed.")}// Prints "This is not a defined temperature unit, so initialization failed."
0 0
- Swift初始化(Initialization)
- Swift 初始化Initialization
- Swift 学习笔记---Initialization
- Swift-Initialization 学习简记
- Swift学习笔记14——初始化(Initialization)和析构(Deinitialization)其一
- Swift学习笔记15——初始化(Initialization)和析构(Deinitialization)其二
- Object Initialization(对象初始化)
- Virtual Initialization - 虚初始化
- 14.Swift-构造过程Initialization
- Swift 构造过程(Initialization)
- swift初始化
- Swift 初始化
- #1 Variable Initialization(变量初始化)
- member initialization list (初始化队伍?)
- 数组初始化 Arrays initialization,stored
- Swift-构造过程(Initialization)(十二)
- Android Initialization Process ---- Android 初始化过程
- 声明(declaration),定义(definition),以及初始化(initialization)
- K好数
- 排序、位置变换
- 对于人工智能的思考
- 编写第一个 Arduino 程序
- 基本过程: 小区搜索
- Swift 初始化Initialization
- Eclipse真机测试注意事项
- Android View体系(七)从源码解析View的measure流程
- remove duplicates from sorted list II
- (4)排序算法——合并排序
- java中编码
- STM32进入HardFault_Handler处理办法
- 3105: [cqoi2013]新Nim游戏|贪心|高斯消元
- 开源网址