         viewDict[key] = view
         self.format = "[\(key)]"
     }
-
+    
+    // ExpressibleByDictionaryLiteral
+    public typealias Key = UIView
+    public typealias Value = VFLComponent
+    public init(dictionaryLiteral elements: (Key, Value)...) {
+        guard elements.count == 1 else {
+            fatalError("view component can contains only one UIView instance: \(elements)")
+        }
+        let view = elements[0].0
+        let numbers = elements[0].1
+        let key = vflKey(view)
+        viewDict[key] = view
+        if numbers.isWrapped {
+            self.format = "[\(key)\(numbers.format)]"
+        } else {
+            self.format = "[\(key)(\(numbers.format))]"
+        }
+    }
+    
+    // ExpressibleByFloatLiteral, ExpressibleByIntegerLiteral
     var metricDict = [String: NSNumber]()
     public typealias FloatLiteralType = Double
     public init(floatLiteral value: FloatLiteralType) {

        metricDict[vflKey(number)] = number
        self.format = key
    }

}

// MARK: - operators

postfix operator |
postfix operator -|

// used for UILayoutPriority
infix operator .~: MultiplicationPrecedence

public struct VFLComponent: ExpressibleByArrayLiteral, ExpressibleByDictionaryLiteral, ExpressibleByFloatLiteral, ExpressibleByIntegerLiteral {
    public var format = ""
    
    // ExpressibleByArrayLiteral
    var viewDict = [String: UIView]()
    public typealias Element = UIView
    public init(arrayLiteral elements: Element...) {
        guard elements.count == 1 else {
