Swift - 使用点

时间:2017-06-22 21:39:30

标签: swift variables nested var names

我会保持简短。我正在努力完成以下任务:

class Media {

var likes.count : Int? = 0  

}

显然,编译器会给我一个error

Consecutive declarations on a line must be separated by ';'

有办法解决这个问题吗?我知道我最终可以使用String Replace做某种Mirror(reflecting:object),但我想保持它的效率。 会喜欢任何帮助。感谢。

更新

我不够清楚,抱歉。问题是编译器不允许我在变量声明名称中使用.

2 个答案:

答案 0 :(得分:1)

我建议使用StructStruct与值引用的类基本相同。因此,您可以使用自己的嵌套Structvariables拥有尽可能多的functions s,就像一个类!最好的部分是,您永远不必使用Struct作为功能代码,就像将变量命名为命名一样。我经常使用Constants swift文件执行此操作。

struct Constants {

    struct MainMenu {
        static var height:CGFloat = 420
        static var width:CGFloat = 240
        static var backgroundColor:UIColor = .red
    }

    struct MainViewController {
        static var toolBarHeight:CGFloat = 49
        static var backgroundColor:UIColor = .blue
    }
}

用法:

func getRemainingHeight() ->CGFloat {
    let viewHeight    = self.view.bounds.size.height
    let menuHeight    = Constants.MainMenu.height
    let toolBarHeight = Constants.MainViewController.toolBarHeight
    return viewHeight - (menuHeight + toolBarHeight)
}

答案 1 :(得分:0)

  

问题是编译器不允许我在变量声明名称中使用.

确切地说,Swift中的属性名称不能包含.字符。

一种可能的方法

现在,如果你想写这样的东西

let media = Media()
media.likes.count = 1

然后你需要定义你的类,如下所示

class Media {
    class Likes {
        var count = 0
    }
    var likes = Likes()
}

class Likes {
    var count = 0
}

class Media {
    var likes = Likes()
}

一些建议

不要使用像这样隐式解包的选项

var likes.count : Int! = 0

它们就像一把准备射击的枪,并使整个应用程序崩溃!

最后,class关键字以小写字母开头:class而不是Class