在Swift中的类的函数调用中,“顶层不允许表达式”

时间:2014-07-24 09:28:36

标签: ios iphone xcode swift

以下是我的代码..我不明白为什么每次都会出现此错误。

import UIKit
import Foundation

class BaseLabel:UILabel
{
     func setFontAndTitle(FontName:String,FontSize:CGFloat,Title:String) {
        self.font = UIFont(name: FontName, size: FontSize)
        self.text = Title
    }

}

var lbl =  BaseLabel()
lbl.setFontAndTitle ("Areal", FontSize: 14, Title: "Check label") 

在最后一行,我收到错误“表达式不允许在顶级”

3 个答案:

答案 0 :(得分:2)

您尝试在课外输入代码。你需要将它放在你的类中并包含在函数体中。请看一下我的解决方案:

import UIKit
import Foundation

class BaseLabel:UILabel
{
    func setFontAndTitle(FontName:String,FontSize:CGFloat,Title:String) {
        self.font = UIFont(name: FontName, size: FontSize)
        self.text = Title
    }

    func changePropertiesOfLabel(){
    var lbl =  BaseLabel()
     lbl.setFontAndTitle ("Areal", FontSize: 14, Title: "Check label")
    }

}

答案 1 :(得分:0)

除了在操场或命令行项目中运行它之外, 我们也可以在单视图应用程序中运行它!

说我们的代码写在ViewController.swift文件中:

import UIKit
import Foundation

class BaseLabel:UILabel {
     func setFontAndTitle(FontName:String,FontSize:CGFloat,Title:String) {
        self.font = UIFont(name: FontName, size: FontSize)
        self.text = Title
    }
}

class ViewController:UIViewController {
    override func viewDidLoad() {
        var lbl =  BaseLabel()
        lbl.setFontAndTitle (FontName: "Areal", FontSize: 14, Title: "Check label")
        print(lbl)
    }
}

答案 2 :(得分:0)

问题在于 Xcode 不知道何时运行您的 var lbl = BaseLabel() lbl.setFontAndTitle ("Areal", FontSize: 14, Title: "Check label")。要解决此问题,您必须将代码放在具有特定运行点(函数或操场)的某处。您可以将它放在 ViewController 的 viewDidLoad 函数中,将它放在 Playground 或其他按顺序运行其代码的文件中,或者将它放在一个新函数中

解决方案 1:

class ViewController: UIViewController {
   override func viewDidLoad() {
      var lbl = BaseLabel()
      lbl.setFontAndTitle(FontName: "Calibri", FontSize: 14, Title: "Check Label"
   }
}

解决方案 2:

把它放在操场上。

解决方案 3(可能是最好和最有效的方法):

func customizeLabel() {
    var lbl = BaseLabel()
    lbl.setFontAndTitle(FontName: "Calibri", FontSize: 14, Title: "Check Label"
}

对于解决方案 3,在 viewDidLoad 或其他活动运行点内运行 customizeLabel()