2016-09-30 49 views
0

我使用第三方SwiftAlertView类(https://github.com/dinhquan/SwiftAlertView)并将Swift从2.3更新为3.
当我遵守时,应用程序和我发现错误消息如下。iOS - Swift 3 - SwiftAlertView - 可选类型

Binary operator '+' cannot be applied to operands of type 'Double' and 'Double!' 

代码如下。
titleTopMargin和titleToMessageSpacing是Double!
那不能添加Double(titleLabel.frame.size.height)。

let topPartHeight = (contentView == nil) ? (titleTopMargin + Double(titleLabel.frame.size.height) + titleToMessageSpacing + Double(messageLabel.frame.size.height) + messageBottomMargin) : Double(contentView!.frame.size.height) 

定义如下。

// customize the margin & spacing of title & message 
open var titleSideMargin: Double! // default is 20 px 
open var messageSideMargin: Double! // default is 20 px 
open var titleTopMargin: Double! // default is 20 px 
open var messageBottomMargin: Double! // default is 20 px 
open var titleToMessageSpacing: Double! // default is 10 px 

如何解决该问题?

谢谢。

+1

你能告诉我们你在哪里定义'titleTopMargin','titleToMessageSpacing'和'messageBottomMargin'吗?问题很可能是其中一个(或多个)隐含地解开。 –

+0

此问题与http://stackoverflow.com/questions/39251005/strange-generic-function-appear-in-view-controller-after-converting-to-swift-3 – vadian

+2

'open var titleSideMargin:Double = 20.0 ' –

回答

0

UIKit的CoreGraphics在始终使用CGFloat的尺寸,他们从来没有使用双类型。所以,我认为我们应该在这里使用CGFloat

0

正如@Rahul的答案。所以设置类型为CGFloat

var titleSideMargin: CGFloat = 20.0 
var messageSideMargin: CGFloat = 20.0 
var titleTopMargin: CGFloat = 20.0 
var messageBottomMargin: CGFloat = 20.0 
var titleToMessageSpacing: CGFloat = 10.0 

let topPartHeight = (contentView == nil) ? (titleTopMargin + titleLabel.frame.size.height + titleToMessageSpacing + messageLabel.frame.size.height + messageBottomMargin) : contentView!.frame.size.height 
1

谢谢大家给我的建议。

这些变量仍然需要使用Double。所以我需要更新下面的代码。

open var titleSideMargin: Double = 20.0 
open var messageSideMargin: Double = 20.0 
open var titleTopMargin: Double = 20.0 
open var messageBottomMargin: Double = 20.0 
open var titleToMessageSpacing: Double = 10.0