Swift-05-ストレージ属性と計算属性
6531 ワード
1.記憶属性
// ,FixedLengthRange
struct FixedLengthRange {
var firstValue: Int
let lenght: Int
}
var rangeOfThreeItens = FixedLengthRange(firstValue: 0, lenght: 3)
// rangeOfThreeItens firstValue lenght
// lenght
rangeOfThreeItens.firstValue = 7;
// rangeOfThreeItens 7 8 9
1.1定数構造体の記憶属性
let rangeOfThreeItens = FixedLengthRange(firstValue: 0, lenght: 3)
rangeOfThreeItens.firstValue = 8
1.2遅延ストレージ属性
// DataImporter ,
class DataImporter {
var fileName = "data.text"
/** **/
}
// DataManager
class DataManager {
lazy var importer = DataImporter()
var data = [String]()
/** **/
}
let manager = DataManager()
manager.data.append("someData")
manager.data.append("someMore")
DataManagerクラスでファイルをインポートする手順を簡単に説明します.DataManagerは、データのインポートを管理し、DataImporterの機能に依存します.データのインポートに時間がかかりすぎ、データをインポートせずにデータの管理が完了する場合があります.DataImporterはすぐに作成する必要はありません.使用するときだけ作成します.
print(manager.importer.fileName)
上記のコードを実行する場合にのみ、DataImporterインスタンスが作成されます.
1.3属性とインスタンス変数の格納
2.計算属性
// ,
struct Point {
var x = 0.0, y = 0.0
}
struct Size {
var width = 0.0, height = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
var center: Point{
get{
let centerX = origin.x + (size.width * 0.5)
let centerY = origin.y + (size.height * 0.5)
return Point(x: centerX, y: centerY)
}
set(newCenter){
origin.x = newCenter.x - (size.width * 0.5)
origin.y = newCenter.y - (size.height * 0.5)
}
}
}
//
var square = Rect(origin: Point(x: 0.0, y: 0.0), size: Size(width: 10.0, height: 10.0))
//
let initialSquareCenter = square.center;
square.center = Point(x: 20.0, y: 20.0)
2.1便利setter声明
struct Rect {
var origin = Point()
var size = Size()
var center: Point{
get{
let centerX = origin.x + (size.width * 0.5)
let centerY = origin.y + (size.height * 0.5)
return Point(x: centerX, y: centerY)
}
set{
origin.x = newValue.x - (size.width * 0.5)
origin.y = newValue.y - (size.height * 0.5)
}
}
}
2.2読取り専用計算属性
// ,volume
struct Cuboid{
var width = 0.0, height = 0.0, depth = 0.0
var volume: Double{
return width * height * depth
}
}
let newCuboid = Cuboid(width: 3.0, height: 4.0, depth: 5.0)
3.属性オブザーバ
// StepCounter
class StepCounter{
var totalStep: Int = 0{
willSet(newTotalSteps){
print(" \(newTotalSteps) ")
}
didSet{
if totalStep > oldValue{
print(" \(totalStep - oldValue) ")
}
}
}
}
let stepCounter = StepCounter()
stepCounter.totalStep = 200;
// 200, 200
stepCounter.totalStep = 500;
// 500, 300
4.グローバル変数とローカル変数
グローバル変数は、関数、メソッド、閉パッケージ、または他のタイプ以外で定義された変数です.ローカル変数は、関数、メソッド、または閉パッケージ内で定義されます.
5.タイプ属性
インスタンスのプロパティは特定のインスタンスに属し、インスタンス間のプロパティは互いに独立しているか、クラスがどれだけのインスタンスがあるかにかかわらず、タイプ自体にプロパティを設定することもできます.これらのプロパティは唯一です.これがタイププロパティです.
5.1型属性構文
Swiftでは、タイプ属性はタイプ定義の一部であり、タイプの最外層カッコ内に書かれており、役割ドメインはこのタイプがサポートする範囲内である.
//
struct MyStruct{
static var storedTypeProperty = "Some Value"
static var comutedTypeProperty : Int{
return 998
}
}
enum MyEnum{
static var storedTypeProperty = "Some Value"
static var comutedTypeProperty : Int{
return 998
}
}
class MyClass {
static var storedTypeProperty = "Some Value"
static var comutedTypeProperty : Int{
return 998
}
class var overridedableComutedTypeProperty : Int{
return 100
}
}
5.2タイプ属性の値の取得と設定
インスタンスのプロパティと同様に、タイププロパティはポイント構文でアクセスできますが、インスタンスを通過する必要はありません.