Hai 😀. Saya mengalami sedikit masalah dengan kode saya dan berpikir mungkin seseorang dapat membantu. Pada dasarnya, saya memiliki kumpulan kelas yang ingin saya pilih satu untuk ditetapkan ke variabel instan opsional. Saya mencari agar pilihan itu dibuat oleh nilai indeks yang mengambil nama kelas dari sebuah array. Saya kesulitan mencari tahu cara menentukan kelas langsung dari string nama kelas
Bagaimana ini seharusnya bekerja. Saya memiliki sejumlah kelas, dalam contoh ini Gajah, Gorila dan Harimau. Saya juga memiliki array String, classNames, dengan nilai yang cocok dengan nama kelas tersebut. Selain itu, saya memiliki variabel Int, classIndex, yang digunakan untuk memilih kelas mana yang akan digunakan. Yang saya inginkan adalah agar variabel instan saya, hewan, dapat mengasumsikan kelas yang dipilih setelah deklarasi awalnya. Terakhir, saya ingin animal dapat menjalankan metode khusus di kelas yang diasumsikannya
Kode contoh
Dengan menyetel animal pada awalnya ke Any?, saya dapat memulainya nanti dengan salah satu kelas saya, dalam contoh ini Tiger, karena classIndex adalah 2. Ketika saya ingin mengakses metode custom move() di Tiger, saya menggunakan operator as untuk mengakses animal sebagai kelas Tiger. Ini berfungsi dengan baik dan bagus, tetapi tidak dinamis. Bagi saya untuk terus memaksa kelas, saya harus meng-hardcode persyaratan untuk memeriksa setiap nama kelas, yang jauh dari ideal
Apakah ada cara untuk menghindari persyaratan ini dengan menentukan kelas langsung dari nama kelas yang dipilih. namakelas[indekskelas]?
Terima kasih atas tanggapannya, OOPer 🙂
Saya mencoba banyak hal, tetapi pasti membuat entitas untuk hewan itu sendiri membantu, dan itu membuat semuanya lebih ramping secara umum. Jadi, saya melanjutkan untuk membuat kelas baru Hewan, yaitu subkelas kelas tipe hewan. Saya punya alasan untuk membuat subkelas daripada menggunakan protokol. Nyatanya, seluruh tema binatang ini hanya ada di sini untuk membuat semuanya lebih mudah dipahami
Menggunakan kelas induk umum membuat banyak hal menjadi lebih dinamis dan sederhana. Namun, saya masih tidak bisa membuat kelas-dari-string berfungsi. Saya mencoba untuk menghindari hardcoding koleksi subclass Animal, karena idenya adalah mereka berasal dari data dan diasumsikan bahwa kelas-kelas itu ada. Saya mencoba NSClassFromString dan Bundle. utama. classNamed(), tapi saya tidak bisa membuatnya dilemparkan dan ditafsirkan dengan benar
Kode saya saat ini
Apa yang masih saya coba lakukan adalah menyingkirkan persyaratan yang tersisa dengan menentukan nama kelas dari string. Jadi, jika animalName == "Tiger" { animal = Tiger() } harus menjadi sesuatu yang mirip dengan animal = NSClassFromString(classNames[classIndex]), tapi saya tidak tahu persis apa
Saat Anda memilih elemen dalam aplikasi untuk ditargetkan oleh Userflow (mis. g. untuk tooltip), Userflow. js mengumpulkan informasi tentang elemen, seperti nama kelasnya dan atribut elemen lainnya, agar dapat menemukan elemen yang sama lagi nanti
Kami menyebutnya inferensi elemen proses ini
Jika aplikasi Anda menggunakan nama atau ID kelas dinamis, Userflow. js mungkin kesulitan menemukan elemen saat aplikasi Anda diterapkan lagi, jika nama kelas atau ID tersebut telah berubah
Anda dapat menyesuaikan Alur Pengguna. js untuk menghindari situasi ini
Jangan ragu untuk menghubungi kami jika kami dapat membantu Anda mengonfigurasi instalasi Anda
Kecualikan nama kelas dinamis
Contoh. Anda menggunakan solusi CSS-in-JS yang menghasilkan nama kelas dinamis pada format css-<hash>, di mana <hash> berubah setiap kali Anda menerapkan
Tambahkan baris berikut sebelum Anda memanggil userflow.init()
userflow.setInferenceClassNameFilter(cls => !cls.startsWith('css-'))Anda juga dapat menggunakan ekspresi reguler lookahead negatif yang hanya cocok dengan string yang tidak dimulai dengan css-
userflow.setInferenceClassNameFilter(/^(?!css-).*/)Lihat juga untuk cara memfilter berdasarkan beberapa pola, atau menggunakan fungsi, bukan ekspresi reguler
Perhatikan bahwa jika semua kelas css Anda dinamis, jalankan saja yang di atas
Kecualikan ID dinamis
Secara default, Userflow. js akan menggunakan atribut id_ elemen. Kecuali jika id diakhiri dengan angka. Ini untuk bekerja out-of-the-box dengan framework JS seperti Ember. js, yang menetapkan ID seperti userflow.setInferenceClassNameFilter(/^(?!css-).*/)0 ke semua elemen yang dikontrolnya
Bagaimana cara mendapatkan kelas dinamis di JavaScript?
This is the magic text
.