2016-09-30 7 views
0

Ich benutze die SwiftAlertView-Klasse (https://github.com/dinhquan/SwiftAlertView) und aktualisiere Swift von 2.3 auf 3.
Als ich einwilligte, fanden die App und ich die Fehlermeldung wie folgt.iOS - Swift 3 - SwiftAlertView - optionaler Typ

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

Der Code folgt.
Die titleTopMargin und titleToMessageSpacing sind Double!
Das kann Double (titleLabel.frame.size.height) nicht hinzufügen.

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

Die Definition folgt.

// 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 

Wie behebe ich das Problem?

Danke.

+1

Können Sie uns zeigen, wo Sie 'titleTopMargin',' titleToMessageSpacing' und 'messageBottomMargin' definieren? Das Problem ist wahrscheinlich, dass eines (oder mehrere) davon implizit ausgepackt werden. –

+0

Das Problem bezieht sich auf http://stackoverflow.com/questions/39251005/strange-generic-function-appear-in-view-controller-after-converting-to-swift-3 – vadian

+2

'öffnen var titleSideMargin: Double = 20.0 ' –

Antwort

0

UIKit und Core Graphics immer CGFloat für Größe verwenden, sie nie zu Double-Typ verwenden. Also, ich denke wir sollten hier CGFloat verwenden.

0

Genau wie @Rahul antwortet. So wählen Sie den Typ 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

Vielen Dank allen für die mir Vorschlag.

Diese Variablen müssen weiterhin Double verwenden. Also muss ich den folgenden Code aktualisieren.

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