 			switch safeAreaOnly {
 			case true:
 				if #available(iOS 11.0, *) {
-					return self.safeSize
+					return self.safeAreaGuide.size
 				} else {
 					fallthrough
 				}
 				
 			case false:
-				return self.boundSize
+				return self.boundsGuide.size
 			}
 		}(aspect.safeAreaOnly)
 		

	}
	
}


import Foundation

private enum SafeAreaGuideBox {
    case none
    @available(iOS 11.0, *) case some(LazyBox<LayoutGuide>)
}

private func makeGuide(direction: UIUserInterfaceLayoutDirection, rect: Rect) -> LayoutGuide {
    
    let guide = LayoutGuide.init(uiLayoutDirection: direction, rect: rect)
    
    return guide
    
}

public struct ViewFrameProperty {
	
	private(set) weak var parentView: UIView?
    
    private let boundsGuideBox: LazyBox<LayoutGuide>
    private let layoutMarginsGuideBox: LazyBox<LayoutGuide>
    private let readableGuideBox: LazyBox<LayoutGuide>
    private let safeAreaGuideBox: SafeAreaGuideBox
    
    init(parentView: UIView) {
        
        self.parentView = parentView
        
        self.boundsGuideBox = .init { [parentView] in
            makeGuide(direction: parentView.currentDirection, rect: parentView.boundsRect)
        }
        
        self.layoutMarginsGuideBox = .init { [parentView] in
            makeGuide(direction: parentView.currentDirection, rect: parentView.layoutMarginsRect)
        }
        
        self.readableGuideBox = .init { [parentView] in
            makeGuide(direction: parentView.currentDirection, rect: parentView.readableRect)
        }
        
        self.safeAreaGuideBox = {
            if #available(iOS 11.0, *) {
                return .some(.init { [parentView] in makeGuide(direction: parentView.currentDirection, rect: parentView.safeAreaRect) })
            } else {
                return .none
            }
        }()
        
    }
	
}

extension ViewFrameProperty: LayoutGuideRepresentable {
    
    public var layoutGuide: LayoutGuide {
        return self.boundsGuide
    }
    
}

extension ViewFrameProperty {
    
    var boundsGuide: LayoutGuide {
        return self.boundsGuideBox.value
    }
    
    var layoutMarginsGuide: LayoutGuide {
        return self.layoutMarginsGuideBox.value
    }
    
    var readableGuide: LayoutGuide {
        return self.readableGuideBox.value
    }
    
    @available(iOS 11.0, *)
    var safeAreaGuide: LayoutGuide {
        guard case .some(let guide) = self.safeAreaGuideBox else {
            preconditionFailure("safeAreaGuide should be able to access on iOS over 11.0")
        }
        return guide.value
    }
    
}

extension ViewFrameProperty {
    
    var layoutMargins: UIEdgeInsets {
        return self.parentView?.layoutMargins ?? .zero
    }
    
    @available(iOS 11.0, *)
    var safeAreaInsets: UIEdgeInsets {
        return self.parentView?.safeAreaInsets ?? .zero
    }
    
}

extension ViewFrameProperty {
