Swift 系统学习 19 结构体的默认构造方法和自定义构造方法

来源:互联网 发布:python 极大似然估计 编辑:程序博客网 时间:2024/05/22 17:47
//: Playground - noun: a place where people can playimport UIKit/* * 本节主要内容: * 1.结构体的默认构造方法和自定义构造方法 *//* * 1.默认构造init方法:没有添加任何的init方法, 由编译器自动生成的方法; 包含所有属性的init方法 * 1.1 默认构造方式失效: 当在声明结构体阶段, 就默认给属性赋值 * 2.没有添加init构造方法, 原则就是使用编译器自动创造init方法 */struct Location {    var latitude: Double  = 0.0    var longitude: Double //= 0.0}// 第一步: 没有给属性初始值//var beijingLocation = Location(latitude: 39.123, longitude: 116.321)// 第二步: 给所有属性初始值//var shanghaiLocation = Location()//shanghaiLocation.latitude = 36.234//shanghaiLocation.longitude// 第三步: 给部分属性初始值var shenzhenLocation = Location(latitude: 33.123, longitude: 115.345)/* * 添加自定义的init方法: * 1.要求:方法名只能是init; 参数类型没有要求(不一定和编译器提供的方法一样); 方法声明不能有返回值(->; return) * 2.作用: 构造/实例化对象(属性进行赋值) * 3.如果添加自定义的init方法, 默认构造方法失效 */struct LocationNew {    var latitude: Double  = 0.0    var longitude: Double = 0.0        // 添加自定义的构造方法    // 假定参数格式: "39.123,116.456"    // 错误参数格式: "39.123*116.456"    init(coordinateString: String) {        // 获取子字符串        // 1.获取逗号所在的index        let commaRange = coordinateString.range(of: ",")        let commaIndex = coordinateString.index((commaRange?.lowerBound)!, offsetBy: 0)        // 2.subString to获取纬度        let firstElement = coordinateString.substring(to: commaIndex)        // 3.subString from获取经度        let secondElement = coordinateString.substring(from: coordinateString.index(commaIndex, offsetBy: 1))        latitude  = Double(firstElement)!        longitude = Double(secondElement)!    }    // init方法可以多个    // 原则: 在编译没有歧义的情况下, self.可以省略    init(latitude: Double, longitude: Double) {        self.latitude  = latitude        self.longitude = longitude    }        init() {        latitude  = 0.0        longitude = 0.0    }}// 实例化, 调用自定义的init方法var newLocation = LocationNew(coordinateString: "39.123,116.456")newLocation.latitudenewLocation.longitudevar beijingLocation = LocationNew()beijingLocation.latitudevar chengduLocation = LocationNew(latitude: 35.123, longitude: 119.335)// 容错处理: 可以处理不符合要求的字符串的格式, init应该是一个可失败的构造方法; init?

0 0