title: Swift Type Inference requires question mark or exclamation point
body: <p>After reading Apple's ARC guide, I'm slowly attempting to get a grasp on retain cycles however what isn't clear to me is swift's type inference requires the optional question mark or forced unwrapping exclamation point when inferring a variable in the global scope of a class.</p>
  
  <p>For example:</p>
  
  <pre><code>import XCTest
  @testable import PassionProject
  
  class ItemManagerTests: XCTestCase {
  
      var sut: ItemManager!
  
      override func setUp() {
          super.setUp()
          // Put setup code here. This method is called before the invocation of each test method in the class.
  
          sut = ItemManager()
      }
  
      override func tearDown() {
          // Put teardown code here. This method is called after the invocation of each test method in the class.
          super.tearDown()
      }
  
      func tests_ToDoCount_Is_InitiallyZero() {
  
          XCTAssertEqual(sut.toDoCount, 0)
      }
  
      func tests_DoneCount_Is_InitiallyZero(){
  
          XCTAssertEqual(sut.doneCount, 0)
      }
  }
  </code></pre>
  
  <p>If I leave out the question mark or explanation point on the following line, it throws an error about the class not having initializers:</p>
  
  <pre><code>var sut: ItemManager
  </code></pre>
  
  <p>My question is, isn't type inference just simply saying this variable will be of this type?  If so, why is Xcode considering it a property if we haven't given it an initial value?  Also second, why does force unwrapping a inferred type compile if we never set its value?</p>
  
  <p>If needed, here is the code for the object we're using as an example and thank you in advance for getting a better grasp:</p>
  
  <pre><code>import Foundation
  
  class ItemManager {
  
      let toDoCount = 0
  
      let doneCount = 0
  
  }
  </code></pre>