【问题标题】:Cannot access a function member using dot notation swift无法使用点表示法快速访问函数成员
【发布时间】:2015-05-05 14:36:34
【问题描述】:

我无法在函数外访问 playerAv() 函数的元素。如何访问它?

我还尝试删除该函数并在任何函数之外使用这些行,但第二行出现错误。为什么我不能在函数之外分配 audioLink 值?

var audioLink = "somewebpage.com/abc.pls"
var player:AVPlayer = AVPlayer(URL: NSURL(string: audioLink))

我试过了

let pa = playerAv()
pa.player.volume = currentValue //I got an error here:(
println(currentValue)

部分代码:

 func playerAv(){
        
        var audioLink = "somewebpage.com/abc.pls"
        var player:AVPlayer = AVPlayer(URL: NSURL(string: audioLink))
    }
@IBAction func sliderValueChanged(sender: UISlider) {
        var currentValue = Float(sender.value)
        println(currentValue)
        player.volume = currentValue
    }

谢谢

【问题讨论】:

  • Swift 不是 JavaScript。
  • 如果你想拥有成员变量,你需要结构或类

标签: ios swift function syntax avplayer


【解决方案1】:

你很困惑。

您正在混淆类和函数。

按设计,函数的局部变量无法在函数外部访问。它们只存在于函数范围内,一旦函数返回就不再存在。因此,您的 playerAv() 函数没有任何用处。

在我看来,您希望 playerAv 是一个类,带有实例变量:

class PlayerAv
{
  let audioLink: String = "http://somewebpage.com/abc.pls"
  var player: AVPlayer
  init()
  {
    player = AVPlayer(URL: NSURL(string: self.audioLink))
  }
}

现在您可以创建一个 PlayerAv 对象并使用它:

let pa = playerAv()
pa.player.volume = currentValue 

【讨论】:

  • 你帮了大忙。谢谢
【解决方案2】:

如果你在函数内部声明var player,那么这个变量的作用域只在函数内部。

您需要将 Player 创建放入控制器或任何适合您的类中:

class MyPlayer {

    var player: AVPlayer

    init(link: String) {
        self.player = AVPlayer(URL: NSURL(string: link))
    }

}

let mp = MyPlayer(link: "http://somewebpage.com/abc.pls")
mp.player.volume = 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多