Swift实例成员问题



我试图在类文件的顶部设置一个变量,以便我可以在几行下面使用它。我遇到的问题是Instance member 'streamWidth' cannot be used on type 'BroadcastViewController'。我认为发生这种情况是因为我不能在主类中引用这个变量,我必须在函数中使用它。如果是这样的话,我有没有办法绕过这个?

 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, btnConnectTouchconnectionStatusChanged都使用顶部定义的var会话。

我要问的是:我如何在var session:VCSimpleSession中使用变量?

多谢!

在初始化其他实例变量时不能使用实例变量。

如果我是你,我会将session更改为隐式取消包装的可选选项,并稍后初始化它:

  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
  }

最新更新