title: Why Swift disallows weak reference for non-optional type?
body: <p>This is not pure curiosity, there is a feeling that I may misunderstand something about weak references in Swift.</p>
  
  <p>Suppose I create a class from a View Controller and pass its reference to the initialiser:</p>
  
  <pre><code>class = MyClass(vc: self)
  </code></pre>
  
  <p>Since the storyboard and window already keep a reference to this View Controller, it seems logical for MyClass to have a weak reference to it (for the similar reason all references created within IB are weak by default): </p>
  
  <pre><code>class MyClass: NSObject {
      private weak var viewController: UIViewController
  
      init(vc: UIViewController) {
         self.viewController = vc
         super.init
      }
  
      func setViewController(_ vc: UIViewController) {
         self.viewController = vc
      }
  
      ...
  }
  </code></pre>
  
  <p>However this code gives compilation error, as viewController variable isn't optional. So I had to add '!' to viewController declaration and remove the initialiser, leaving only <code>setViewController</code> which looks rather unnatural.</p>
  
  <p>What is the reason behind disallowing non-optional weak data? </p>