2015-10-18 4 views
0

Я пытаюсь настроить переменную в верхней части файла класса, чтобы я мог использовать ее несколькими строками вниз. Вопрос, который у меня есть, - Instance member 'streamWidth' cannot be used on type 'BroadcastViewController'. Поэтому я думаю, что это происходит, потому что я не могу ссылаться на эту переменную в основном классе, я должен использовать ее в функции. Теперь, если это так, есть ли способ обойти это?Swift Member Member Issue

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 

} 

Таким образом, некоторые из этих функций, такие как deinit, btnConnectTouch и connectionStatusChanged все используют сессию уага определенную в верхней части.

Что я спрашиваю: как мне использовать переменные в пределах var session:VCSimpleSession?

Большое спасибо!

ответ

2

Вы не можете использовать переменные экземпляра при инициализации других переменных экземпляра.

Если бы я тебя, я хотел бы изменить session к implicitly 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