티스토리 뷰
출처
프로퍼티 (Properties)
저장 프로퍼티 (Stored Properties)
struct FixedLengthRange {
var firstValue: Int
let length: Int
}
var rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
// the range represents integer values 0, 1, and 2
rangeOfThreeItems.firstValue = 6
상수 구조체의 인스턴스 저장 프로퍼티
let rangeOfThreeItems = FixedLengthRange(firstValue: 0, length: 3)
// the range represents integer values 0, 1, and 2
rangeOfThreeItems.firstValue = 6
느린 저장 프로퍼티 (Lazy Stored Properties)
class DataImporter {
var fileName = "data.txt"
}
class DataManager {
lazy var importer = DataImporter()
var data = [String]()
}
let manager = DataManager()
manager.data.append("Some data")
manager.data.append("Some more data")
print(manager.importer.fileName)
계산 프로퍼티 (Computed Properties)
프로퍼티, 클래스, 구조체와 열거형을 저장하기 위해
실제 값을 저장하지는 않는 계산 프로퍼티를 정의할 수 있다.
대신, 다른 프로퍼티와 값을 직접 가져오고 설정하기 위해
getter 와 setter 를 제공한다.
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 / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
} set(newCenter) {
origin.x = newCenter.x - (size.width / 2)
origin.y = newCenter.y - (size.height / 2)
}
}
}
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: 15.0, y: 15.0)
print("square.origin is now at (\(square.origin.x), \(square.origin.y))")
// 10, 10
축약된 Setter 선언
struct AlternativeRect {
var origin = Point()
var size = Size()
var center: Point {
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set {
origin.x = newValue.x - (size.width / 2)
origin.y = newValue.y - (size.height / 2)
}
}
}
읽기 전용 계산 프로퍼티 (read-only)
setter 가 없이 getter 만 가진 계산 프로퍼티는
read only 속성을 가지게 된다.
계산 프로퍼티 (읽기 전용 계산 프로퍼티 포함) 는 값이 고정되어있지 않기 때문에
var 키워드로 변수 프로퍼티로 선언해야한다.
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)")
프로퍼티 옵저버
class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
print("About to set totalSteps to \(newTotalSteps)")
}
didSet {
if totalSteps > oldValue {
print("Added \(totalSteps - oldValue) steps")
}
}
}
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
전역변수와 지역변수
타입 프로퍼티 (Type Property Syntax)
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"
타입 프로퍼티 조회와 설정
struct AudioChannel {
static let thresholdLevel = 10
static var maxInputLevelForAllChannels = 0
var currentLevel: Int = 0 {
didSet {
if currentLevel > AudioChannel.thresholdLevel {
// cap the new audio level to the threshold level
currentLevel = AudioChannel.thresholdLevel
}
if currentLevel > AudioChannel.maxInputLevelForAllChannels {
// store this as the new overall maximum input level
AudioChannel.maxInputLevelForAllChannels = currentLevel
}
}
}
}
var leftChannel = AudioChannel()
var rightChannel = AudioChannel()
leftChannel.currentLevel = 7
print(leftChannel.currentLevel)
// Prints "7"
print(AudioChannel.maxInputLevelForAllChannels)
// Prints "7"
rightChannel.currentLevel = 11
print(rightChannel.currentLevel)
// Prints "10"
print(AudioChannel.maxInputLevelForAllChannels)
// Prints "10"
'iOS 개발 > Swift' 카테고리의 다른 글
[Swift 3] 서브스크립트 (Subscript) (0) | 2017.04.15 |
---|---|
[Swift 3] 메소드 (Method) (0) | 2017.04.15 |
[Swift 3] 클래스와 구조체 (1) | 2017.04.14 |
[Swift 3] 열거형 (Enumerations) (0) | 2017.04.14 |
[Swift 3] 클로저 (Closures) (0) | 2017.04.14 |
- Total
- Today
- Yesterday
- Arc
- Swift
- AWS
- Swfit
- coredata
- CGImage
- delegate
- HTTP
- 꺼내먹어요
- applicationWillResignActive
- set
- Swift 3.0
- UIView
- CIImage
- docker
- NSManagedObjectModel
- NSManagedObject
- ios
- EffectiveObjectiveC
- NSManagedObjectContext
- RunLoop
- 읽기 좋은 코드가 좋은 코드다
- dictionary
- string
- optional
- Swift3
- Block
- Swift 3
- thread
- workerThread
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |