结构体

2016-09-08  本文已影响14人  心底碎片
struct Location{
    let latitude:Double
    let longitute:Double
}
let appleHeadQuarterLocation = Location(latitude: 37.3230, longitute: -122.0322)
let googleHeadQuarterLocation: Location = Location(latitude: 37.4220, longitute: -122.0841)
appleHeadQuarterLocation.latitude
appleHeadQuarterLocation.longitute

struct Place {
    let location:Location
    var name: String
}
var googleHeadQuarter = Place(location: googleHeadQuarterLocation, name: "Google")
googleHeadQuarter.location.latitude

结构体的构造函数

struct Location{
    let latitude:Double
    let longitute:Double
    var placename:String?
    //使用Failable-Initializer
    init(coordinateString: String){
        let commsIndex = coordinateString.rangeOfString(",")!.startIndex
        let firstElement = coordinateString.substringToIndex(commsIndex)
        let secondElement = coordinateString.substringFromIndex(commsIndex.successor())
        self.latitude = Double(firstElement)!
        self.longitute = Double(secondElement)!
    }
    init( _ coordinateString2: String){//省略构造函数的名字
        let commsIndex = coordinateString2.rangeOfString(",")!.startIndex
        let firstElement = coordinateString2.substringToIndex(commsIndex)
        let secondElement = coordinateString2.substringFromIndex(commsIndex.successor())
        self.latitude = Double(firstElement)!
        self.longitute = Double(secondElement)!
    }
    init(latitude:Double, longitute:Double){
        self.latitude = latitude
        self.longitute = longitute
    }
    init(latitude:Double, longitute:Double, placename:String?){
        self.latitude = latitude
        self.longitute = longitute
        self.placename = placename
    }
}
let location = Location(coordinateString: "37.3230,-122.0322")
let location2 = Location("37.3230,-122.0322")
let location3 = Location(latitude: 37.3230, longitute: -122.0322)
let location4 = Location(latitude: 37.3230, longitute: -122.0322, placename: "apple")

使用Failable-Initializer可以失败的构造函数

struct Location{
    let latitude:Double
    let longitute:Double
    init?(coordinateString: String){
        if let commsIndex = coordinateString.rangeOfString(",")?.startIndex{
            if let firstElement = Double(coordinateString.substringToIndex(commsIndex)){
                if let secondElement = Double(coordinateString.substringFromIndex(commsIndex.successor())){
                    self.latitude = Double(firstElement)
                    self.longitute = Double(secondElement)
                }else{
                    return nil
                }
            }else{
                return nil
            }
        }else{
            return nil
        }
    }
}

用guard简化为---层层筛选

struct Location{
    let latitude:Double
    let longitute:Double
    init?(coordinateString: String){
        /*
        guard let commsIndex = coordinateString.rangeOfString(",")?.startIndex
            else{
            return nil
        }
        guard let firstElement = Double(coordinateString.substringToIndex(commsIndex))
            else{
            return nil
        }
        guard let secondElement = Double(coordinateString.substringFromIndex(commsIndex.successor()))
            else{
            return nil
        }
*/
        //继续简化
        guard
        let commsIndex = coordinateString.rangeOfString(",")?.startIndex,
        let firstElement = Double(coordinateString.substringToIndex(commsIndex)),
        let secondElement = Double(coordinateString.substringFromIndex(commsIndex.successor()))
            else{
                return nil
        }
        self.latitude = Double(firstElement)
        self.longitute = Double(secondElement)
    }
}
//let location = Location(coordinateString: "37.3230&-122.0322")

在结构体和枚举中定义方法

struct Location{
    let latitude:Double
    let longitute:Double
    init?(coordinateString: String){
        guard
            let commsIndex = coordinateString.rangeOfString(",")?.startIndex,
            let firstElement = Double(coordinateString.substringToIndex(commsIndex)),
            let secondElement = Double(coordinateString.substringFromIndex(commsIndex.successor()))
            else{
                return nil
        }
        self.latitude = Double(firstElement)
        self.longitute = Double(secondElement)
    }
    init(latitude:Double, longitute:Double){
        self.latitude = latitude
        self.longitute = longitute
    }
    //在结构体和枚举中叫做方法
    func printLocation(){
        print("The location is \(self.latitude),\(self.longitute)")
    }
    func isNorth() ->Bool{
        return self.longitute > 0
    }
    func isSouth() ->Bool{
        return !self.isNorth()
    }
    func distanceTo(location: Location) ->Double{
        return sqrt(pow(self.latitude - location.latitude, 2) + pow(self.longitute - location.latitude, 2))
    }
}
let appleHeadQuarterLocation = Location(latitude: 37.3230, longitute: -122.0322)
appleHeadQuarterLocation.printLocation()
appleHeadQuarterLocation.isSouth()
appleHeadQuarterLocation.isNorth()
let googleHeadQuarterLocation: Location = Location(latitude: 37.4220, longitute: -122.0841)
appleHeadQuarterLocation.distanceTo(googleHeadQuarterLocation)

结构体和枚举是值类型Value Type

struct Point{
    var x = 0
    var y = 0
}
var p1 = Point()
var p2 = p1
p2.x += 1
p2

#######Array Dictionary,Set都是结构体
#######Int, Float, Double, Bool, String都是结构体

上一篇下一篇

猜你喜欢

热点阅读