2015-10-18 62 views
0

我想在類文件的頂部設置一個變量,所以我可以使用它幾行。我遇到的問題是Instance member 'streamWidth' cannot be used on type 'BroadcastViewController'。所以我認爲這是因爲我不能在主類中引用這個變量,所以我必須在函數中使用它。現在如果是這樣的話,我有辦法解決這個問題嗎?Swift背景成員問題

class BroadcastViewController: UIViewController, VCSessionDelegate { 
     @IBOutlet weak var previewView: UIView! 
     @IBOutlet weak var btnConnect: UIButton! 

     var streamWidth:Int = Int(5) 

     var session:VCSimpleSession = VCSimpleSession(videoSize: CGSize(width: streamWidth, height: 720), frameRate: 30, bitrate: 1000000, useInterfaceOrientation: false) 

     override func viewDidLoad() { 
      super.viewDidLoad() 
      previewView.addSubview(session.previewView) 
      session.previewView.frame = previewView.bounds 
      session.delegate = self 

     } 

     deinit { 
      btnConnect = nil 
      previewView = nil 
      session.delegate = nil; 
     } 

     @IBAction func btnConnectTouch(sender: AnyObject) { 
      switch session.rtmpSessionState { 
      case .None, .PreviewStarted, .Ended, .Error: 
       session.startRtmpSessionWithURL("rtmp://east-us.livewx.tv/live", andStreamKey: "fb4843e86976e37" + "?key=" + "e5615d9b171384a0613f") 
      default: 
       session.endRtmpSession() 
      break 
     } 
     func connectionStatusChanged(sessionState: VCSessionState) { 
      switch session.rtmpSessionState { 
      case .Starting: 
       btnConnect.setTitle("Connecting", forState: .Normal) 
      case .Started: 
       btnConnect.setTitle("Disconnect", forState: .Normal) 
      default: 
       btnConnect.setTitle("Connect", forState: .Normal) 
      } 
     } 

     // more functions left out for length reasoning 

} 

所以其中的一些功能,如deinitbtnConnectTouchconnectionStatusChanged都使用頂部定義的變種會話。

我在問:我怎樣才能使用var session:VCSimpleSession內的變量?

非常感謝!

回答

2

初始化其他實例變量時,不能使用實例變量。

如果我是你,我會改變sessionimplicitly unwrapped optional後來初始化:

var session: VCSimpleSession! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     session = VCSimpleSession(videoSize: CGSize(width: streamWidth, height: 720), frameRate: 30, bitrate: 1000000, useInterfaceOrientation: false) 
     previewView.addSubview(session.previewView) 
     session.previewView.frame = previewView.bounds 
     session.delegate = self 
    } 
+0

哇,沒有工作 - 謝謝!不過,爲什麼我們要這樣做:'var session:VCSimpleSession!'? – Craytor

+0

這就是所謂的隱式解包可選。看看上面的鏈接和Apple的文檔https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID334 – jrc