struct FixedLengthRange {
var firstValue: Int
let length: Int
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
// jangkuan tersebut memakili nilai integer 0, 1, dan 2
rangeOfThreeItems.firstValue = 6
// jangkuan tersebut sekarang memakili nilai integer 6, 7, dan 8
let rangeOfFourItems = FixedLengthRange(firstValue: 0, length: 4)
// jangkuan tersebut memakili nilai integer 0, 1, dan 2
rangeOfFourItems.firstValue = 6
// ini akan menimbulkan kesalahan, meskipun firstValue adalah properti variabel
class DataImporter {
/*
DataImporter adalah class untuk mengimpor data dari berkas eksternal.
Class ini diasumsikan akan mengambil jumlah waktu yang tidak ditentukan untuk diinisialisasi.
*/
var filename = "data.txt"
// class DataImporter akan menyediakan fungsionalitas pengimporan data di sini
}
class DataManager {
lazy var importer = DataImporter()
var data = [String]()
// class DataManager akan menyediakan fungsionalitas manajemen data di sini
}
let manager = DataManager()
manager.data.append("Some data")
manager.data.append("Some more data")
// instance DataImporter untuk properti
print(manager.importer.filename)
// instance DataImporter untuk properti importer kini telah dibuat
// Menyetak "data.txt"
struct Point {
var x = 0.0, y = 0.0
}
struct Shape {
var origin = Point()
var center: Point {
get {
return Point(x: origin.x/2 , y: origin.y/2)
}
set(newCenter) {
origin.x = newCenter.x/2
origin.y = newCenter.y/2
}
}
}
struct Point {
var x = 0.0, y = 0.0
}
struct Shape {
var origin = Point()
var center: Point {
get {
return Point(x: origin.x/2, y: origin.y/2)
}
set {
origin.x = newValue.x/2
origin.y = newValue.y/2
}
}
}
struct Cuboid {
var width = 0.0, height = 0.0, depth = 0.0
var volume: Double {
return width * height * depth
}
}
let fourByFiveByTwo = Cuboid(width: 4.0, height: 5.0, depth: 2.0)
print("the volume of fourByFiveByTwo is \(fourByFiveByTwo.volume)")
// Prints "the volume of fourByFiveByTwo is 40.0"
// CONTOH
class StepCounter {
var totalSteps: Int = 0 {
willSet(newSteps) {
print("About to set totalSteps to \(newSteps)")
}
didSet {
if totalSteps > oldValue {
print("Added \(totalSteps - oldValue) steps")
}
}
}
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 50
// About to set totalSteps to 50
// Added 50 steps
stepCounter.totalSteps = 150
// About to set totalSteps to 150
// Added 100 steps
stepCounter.totalSteps = 420
// About to set totalSteps to 420
// Added 270 steps
// KUNCI STATIC
struct SomeStructure {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 1
}
}
enum SomeEnumeration {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 6
}
}
class SomeClass {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 27
}
class var overrideableComputedTypeProperty: Int {
return 107
}
}
print(SomeStructure.storedTypeProperty)
// Prints "Some value."
SomeStructure.storedTypeProperty = "Another value."
print(SomeStructure.storedTypeProperty)
// Prints "Another value."
print(SomeEnumeration.computedTypeProperty)
// Prints "6"
print(SomeClass.computedTypeProperty)
// Prints "27"