Ketika saya mendefinisikan enum:

enum Test: CGFloat {
    case zero
}

Dan dua fungsi yang mirip dengan berikut ini:

func test(_ param: CGFloat) { 
    print("param - \(param)") 
}

func test(_ param: Test) { 
    print("param - \(param.rawValue)") 
}

Masalah saat saya mencoba menggunakannya:

test(Test.zero) <- prints "param - 0"
test(.zero) <- error: ambiguous use of .zero

Sementara saya mengerti bahwa kompiler berbenturan dengan dua definisi .zero, saya mencoba menunjukkan dengan tepat di mana itu diubah dalam catatan rilis Xcode 12.5. Mungkin seseorang dapat mengarahkan saya ke arah yang benar? Sepertinya itu berfungsi di 12.4.

Catatan:

Itu dapat diperbaiki dengan:

  • Desain API yang lebih baik;
  • Menggunakan @_disfavoredOverload seperti berikut percakapan.
1
ignotusverum 11 Mei 2021, 17:33

1 menjawab

Jawaban Terbaik

Mungkin konsekuensi sekunder dari

Ekspresi anggota implisit sekarang mendukung rantai akses anggota. (57295228)

Anda mungkin mengajukan bug karena kode yang ada rusak, tetapi memiliki kasus tepi jadi mungkin seharusnya tidak pernah berfungsi. Bagaimanapun saya yakin mengatakan Test.zero mempercepat kompilasi. Pemeriksaan jenis ini rumit, seperti yang ditunjukkan oleh tautan forum Anda.

1
matt 11 Mei 2021, 23:26