Ich mag die Zeilennummer bekommen, wo ich den Index für Debugging-Zwecke (wie Index außerhalb des zulässigen Bereichs und so weiter) genannt habe:Get Zeilennummer in Indizes mit #line
/* 1*/ struct Collection {
/* 2*/ // this works flawlessly
/* 3*/ func getElement(index: Int, line: UInt = #line) -> Double {
/* 4*/ print(line) // 16
/* 5*/ return 0.0
/* 6*/ }
/* 7*/
/* 8*/ // error: Default argument is only permitted for a non-curried function parameter
/* 9*/ subscript(index: Int, line: UInt = #line) -> Double {
/*10*/ print(line) // should print 17
/*11*/ return 0.0
/*12*/ }
/*13*/ }
/*14*/
/*15*/ let c = Collection()
/*16*/ c.getElement(1)
/*17*/ c[1]
Wie Sie das sehen tiefgestellte Version funktioniert nicht.
Gibt es einen Workaround für diese Einschränkung?
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Subscripts.html: * "Indizes können variable Parameter und variadische Parameter verwenden, ** können ** aber nicht in-out verwenden Parameter oder ** liefern Standardparameterwerte. ** "* –
@AMomchilov: Selbst wenn es inline wäre, würde der Compiler immer noch die korrekte Zeilennummer einfügen. Das ist nicht das Problem. –
@VatsalManot oh, du hast Recht, dass die Vorverarbeitung vor der Kompilierung stattfindet. Hmm, welchen Grund könnte es geben, ausgefallene Werte zu verbieten? – Alexander