我正在使用swift设置BLKFlexibleHeightBar。当我写var flexibleHeightBar = BLKFlexibleHeightBar(frame: CGRectMake(0, 0, self.view.frame.size.width, 100))
时,标题出现时出错。
我该如何解决这个问题?
答案 0 :(得分:3)
frame
应该是CGRect,而你没有提供。您的frame: 0, 0, self.view.frame.size.width, 100
只是一系列数字,而不是CGRect。斯威夫特不知道这些数字在那里做了什么。如果你想要一个CGRect - 你做了 - 你必须这样说:
frame: CGRectMake(0, 0, self.view.frame.size.width, 100)
答案 1 :(得分:1)
该错误显然与您对self.view
的调用有关,根据错误,编译器认为self
的类型为ViewController -> () -> ViewController
,而不是您可能期望的那样是ViewController
。
你在哪里写这段代码?
如果您是在init
代码或static func
的{{1}}中编写的,那么在该上下文中ViewController
不是self
的实例别的东西。并且考虑到您编写该代码的位置,ViewController
并不代表您self.view
的实例ViewController
属性,可能是因为view
不是'创造了。
您需要将代码从self
(正在创建init()
实例但尚未准备好的地方)移至self
(一旦viewDidLoad
' s ViewController
刚刚创建。)
view
类型如果你想获得更多的技术并理解为什么编译器期望ViewController -> () -> ViewController
在你的错误中属于那种类型,那么在Swift中,实例方法实际上也作为类方法公开它将一个实例作为参数并返回实例方法(该机制被称为" currying")。
例如,self
类具有类型为String
的实例方法hasPrefix
。它也作为一个类方法公开,它期望String -> Bool
实例并返回在该实例上应用的上述实例方法;因此String
的类型为String.hasPrefix
,String -> String -> Bool
严格等同于String.hasPrefix("Hello world")("Hello")
(是的,我知道一开始看起来很奇怪,但这很有意义)。 当然,一般来说,你很少(如果有的话)在你的日常代码中使用它,这只是Swift很少使用的功能,但它就在那里。
回到上下文,您使用"Hello world".hasPrefix("Hello")
的{{1}}方法。 init
实际上是(特殊)实例方法(ViewController
之前没有init()
/ static
),在这种情况下,不带参数(class
)并将返回init
个实例,因此其类型为()
。此实例方法也可以解释为类型为ViewController
的类方法(在() -> ViewController
类上),因为在幕后它将使用(未初始化的,新分配的){{{ 1}}并将返回一个函数(ViewController
),一旦调用(没有参数,ViewController -> () -> ViewController
),将返回ViewController
的初始化实例。
这就是init
来自上面的错误消息的地方。