티스토리 뷰
안녕하세요 :) Zedd입니다.
오늘은 추석을 맞아..간단한...차이점을 알아볼거에요 :)
예전에 frame관련 글을 썼을 때 들었던 궁금증인데 지금에서야 쓰네요 ㅠ
이 글을 읽기전에!!
<CGRect와 CGSize의 차이, 그리고 CGPoint >이 글을 읽고오시면(특히 CGRect!!!) 글을 이해하는데 도움이 많이 되실거에요 :)
아무튼 궁금했던 frame.height와 frame.size.height의 차이점을 알아볼게요 :)
frame.height VS frame.size.height
글은 height로 썼지만...width에도 적용이 되는 차이점이랍니다 :)
그냥 편의상 height로 말할게요XD..
프로젝트를 열고, View를 하나 추가해주고 IBOutlet를 연결해주었어요.
그러면,
myView.frame.height
myView.frame.size.height
이렇게 높이와 관련된 프로퍼티에 접근이 가능하게 됩니다.
그리고, frame은 <Frame과 Bounds의 차이 (1/2)>글에서 볼 수 있듯이 UIView의 인스턴스 프로퍼티로서, CGRect타입이었어요.
그리고 CGRect는 origin, size라는 변수를 가지는 구조체였어요.
struct CGRect {
var origin: CGPoint
var size: CGSize
}
extension CGRect {
...
var width: CGFloat { get }
var height: CGFloat { get }
...
}
이제 진짜 frame.height VS frame.size.height의 차이점을 알아봅시다.
1. frame.height
frame.height는 바로..!!
extension CGRect {
...
var width: CGFloat { get }
var height: CGFloat { get }
...
}
이 CGRect를 extension한 곳에 있는 프로퍼티인, height를 의미하는 것입니다.
frame이 CGRect타입이었으니, CGRect의 모든 프로퍼티에 바로 접근할 수 있겠죠?
{ get }이라는 것이 눈에 띄네요.
2. frame.size.height
반면에 frame.size.height는...
struct CGRect {
var origin: CGPoint
var size: CGSize
}
저 CGRect구조체 안에 있는 size에 먼저 접근한다음,
public struct CGSize {
public var width: CGFloat
public var height: CGFloat
public init()
public init(width: CGFloat, height: CGFloat)
}
size가 CGSize형이었으므로, CGSize안에 있는 저 height라는 프로퍼티에 접근하게 되는것이죠.
자, 이제 둘의 차이점을 봅시다.
extension CGRect {
...
var width: CGFloat { get }
var height: CGFloat { get }
...
}
public struct CGSize {
public var width: CGFloat
public var height: CGFloat
public init()
public init(width: CGFloat, height: CGFloat)
}
둘다 CGFloat이긴한데..차이점이 있다면, public과 { get }의 유무겠네요.
public은 음..오늘의 차이점에서는 별다른 역할을 하지 못하니 생각하지 않을게요.
frame.height와 frame.size.height의 차이점은 바로 저 { get }에서 오는데요,
{ get }에 대한 거는 나중에 따로 글을 쓸텐데, 지금 간단하게 말씀드리면
c++이나 JAVA의 getter아시죠? 그것과 상당히 유사합니다.
getter는 setter와 다르게 값을 set하지 않고, 값을 리턴해주는 역할을 하죠?
Swift도 똑같습니다!!
그러니까, { get }이라고 적힌거는 값을 리턴하는 역할을 하는것이죠.
({ get }이 있다면, { set }도 있겠죠? 정확히는 { set }하나만을 구현할 수는 없고, { set }을 구현하려면 { get }도 있어야해요. 하지만 { get }만을 구현하는것은 가능하답니다. 이건 나중에 볼게요 XD)
아!! 그럼 frame.height와 frame.size.height는
frame.height -> {get}
frame.size.height
이라는 차이점이 있네요.
즉!!!!!!!!!!!!!
myView.frame.height = 10//error!!!! frame.height는 get이므로.
myView.frame.size.height = 10//가능
이라는것이죠.
역시 width에도 똑같이 적용이 됩니다.
어떠신가요 ㅎㅎ
추석을 맞아 이러한 차이점을 알아보았습니다 :)
즐거운 명절되세요XD
오늘도 도움이 되었길 바래요💕
'iOS' 카테고리의 다른 글
iOS ) alert에 TextField추가하는 법 (5) | 2017.10.10 |
---|---|
iOS ) CGColor와 UIColor의 차이 (3) | 2017.10.05 |
iOS ) TableView cell의 separator padding 문제 (3) | 2017.09.28 |
iOS ) Frame과 Bounds의 차이 (2/2) (2) | 2017.09.21 |
iOS 11 달라진 점!! (2) | 2017.09.20 |
- 제이슨 파싱
- Git
- IOS
- np-hard
- WidgetKit
- swift array
- Swift
- swift sort
- swift tutorial
- 스위프트 문법
- np-complete
- Accessibility
- FLUTTER
- WKWebView
- iOS delegate
- Combine
- ios 13
- SwiftUI
- 피아노
- swift delegate
- actor
- fastlane
- 회고
- swift3
- github
- UIBezierPath
- 스위프트
- WWDC
- swift 공부
- Xcode
- Total
- Today
- Yesterday