Saya mencoba melakukan hal berikut:

var stringwithcharactherTofind = "booboo$booboo"

switch stringwithcharactherTofind{
  case stringwithcharactherTofind.ifhasprefix("$"):
  stringwithcharactherTofind = "done"
  default:
  break
}

Apakah mungkin untuk melakukan ini?

Sama sekali

-3
bibble triple 15 November 2017, 13:46

1 menjawab

Jawaban Terbaik

Pernyataan switch cocok dengan nilai yang diberikan terhadap pola yang diberikan. stringwithcharactherTofind.hasprefix("$") adalah ekspresi boolean dan bukan pola yang bisa dicocokkan dengan string.

Anda bisa (ab)menggunakan klausa where dalam kombinasi dengan pola wildcard:

let str = "FooBar"

switch str {
case _ where str.hasPrefix("Foo"):
    print("prefix")
case _ where str.contains("Foo"):
    print("contains")
default:
    print("nope")
}

Anda bahkan bisa menentukan operator pencocokan pola yang memungkinkan untuk mencocokkan nilai dengan predikat boolean (juga ditunjukkan di sini):

func ~=<T>(lhs: (T) -> Bool, rhs: T) -> Bool {
    return lhs(rhs)
}

let str = "FooBar"

switch str {
case { $0.hasPrefix("Foo") }:
    print("prefix")
case { $0.contains("Foo") }:
    print("contains")
default:
    print("nope")
}

Tapi mengapa membuatnya begitu rumit? Pernyataan if/else if/else melakukan apa yang Anda butuhkan:

if str.hasPrefix("Foo") {
    print("prefix")
} else if str.contains("Foo") {
    print("contains")
} else {
    print("nope")
}
2
Martin R 15 November 2017, 12:22