2016-07-13 8 views
29

In meinem Projekt (in Swift 3 geschrieben) möchte ich Index eines Elements aus Array mit indexOf(_:) Methode (in Swift 2.2 vorhanden) abrufen, aber ich kann keinen Ersatz finden dafür.Ersatz für Array indexOf (_ :) -Methode in Swift 3

Gibt es einen guten Ersatz für diese Methode in Swift 3 oder ähnliches?

aktualisieren

ich vergessen zu erwähnen, dass ich in benutzerdefinierten Objekt suchen möchten. Bei der Codevervollständigung habe ich keine Hinweise bei der Eingabe von 'indexof'. Aber wenn ich versuche, Index von Build in Typ wie Int Code-Fertigstellung funktioniert und ich könnte index(of:) Methode verwenden.

+1

'Index (von:)'? Unterschiedliche Syntax, gleiche Funktionalität. Vorschlag: Verwenden Sie Code-Vervollständigung. – vadian

+0

Sie müssen dieses Dokument lesen und bookmarken: https://github.com/apple/swift-evolution/blob/master/proposals/0006-apply-api-guidelines-to-the-standard-library.md – Moritz

+0

Yeah I versucht. Die Codevervollständigung zeigte jedoch nicht die Methode 'index (of:)' für ein benutzerdefiniertes Objekt. Es wird nur für Buildtypen angezeigt. – krlb

Antwort

46

indexOf(_:) wurde umbenannt in index(of:) für Typen, die Equatable entsprechen. Sie können zu Equatable jeden Ihres Typ entsprechen, es ist nicht nur für die eingebauten Typen:

struct Point: Equatable { 
    var x, y: Int 
} 

func == (left: Point, right: Point) -> Bool { 
    return left.x == right.x && left.y == right.y 
} 

let points = [Point(x: 3, y: 5), Point(x: 7, y: 2), Point(x: 10, y: -4)] 
points.index(of: Point(x: 7, y: 2)) // 1 

indexOf(_:), die eine Schließung zu index(where:) umbenannt wurde nimmt:

[1, 3, 5, 4, 2].index(where: { $0 > 3 }) // 2 

// or with a training closure: 
[1, 3, 5, 4, 2].index { $0 > 3 } // 2 
+1

Equatable Angelegenheiten :). – Senry

1

nicht für mich arbeiten in Swift 3 XCode 8 bis ich meiner Klasse eine extension gab.

Zum Beispiel:

class MyClass { 
    var key: String? 
} 

extension MyClass: Equatable { 
    static func == (lhs: MyClass, rhs: MyClass) -> Bool { 
     return MyClass.key == MyClass.key 
    } 
} 
1

Dieser arbeitete für mich in Swift 3 ohne Erweiterung:

struct MyClass: Equatable { 
    let title: String 

    public static func ==(lhs: MyClass, rhs: MyClass) -> Bool { 
     return lhs.title == rhs.title 
    } 
} 
Verwandte Themen