Swift Xcode İndeksi Dondurma veya Yavaş


101

Belki de bu kadar sinir bozucu bir "özelliği" deneyimleyen sadece benim:

Xcode 6.0.1'den Xcode 6.1'e yükselttikten sonra işler değişti. Xcode 6.1, sonsuza kadar projeyi indeksler veya kaynak dosyaları derler. Proje çok büyük değil. Çalışma alanında yalnızca bir dizi Swift dosyası ve AWS SDK 2.0 Cocoapod içerir. Bütünün sorunsuz bir şekilde indekslenmesini ve derlenmesini engellemesi gerektiğini düşünmüyorum. Xcode 6.1'in onlar üzerinde nasıl çalıştığını görmek için bazı aws-sdk-ios-örnekleriyle denedim ve aynı şekilde sonsuza dek bekledim.

Şimdiye kadar hangi çözümleri denedim:

  1. Düzenleyicide "Türetilmiş Verileri" silme ve yeniden açma ve çalışma alanı. (düzeltilemiyor)
  2. .Xcodeproj dosyasında "Paket İçeriğini Göster" ve .xcworkspace'i silme ( Xcode 4 - yavaş performans )

Ne yazık ki hiçbiri işe yaramadı.

Not: Belki projeyi yeniden oluşturmayı denemeliyim? Bilgisayar ayarlarım: MacBook Pro (Retina, 13 inç, 2014 Ortası), Bellek 8 GB 1600 MHz DDR3, Yosemite ile. (Bu küçük projeyi yürütmek için bunun yeterli olduğunu düşünüyorum.)



2
Çok yardımcı olmayacağım ama yaptığım şey ... xcode 6.x'in zamanı almasına izin veriyorum. Eğer onunla savaşırsam, beni çok fazla mahveder, bu yüzden xcode 6'nın başlamasını beklerim. Aptalca indekslemesini çalıştırmasına izin verdim. Daha sonra iOS simülatörünü ayrı olarak başlatıyorum ve aptal sıçrama tahtası görünene kadar bekliyorum. Son olarak, bir proje yürüttüğümde, İndekslemede birçok kez "Duraklatıldı" ifadesini görmezden geliyorum ve <# godObject #> için dua ediyorum, kahve içiyorum ve zen moduna girmeye çalışıyorum. Ama * iç çekiş *, çok zor: / ve xcode 5.1.1'i gerçekten sevmiştim: |
staticVoidMan

Bu cevap benim için çalıştı: stackoverflow.com/a/33395844/242933
ma11hew28

Yanıtlar:


72

Dosyaları bölme, Xcode 6.2 beta yükleme ve dize birleştirme ifadelerini kırma dahil olmak üzere yukarıdaki önerilerin çoğunu denedim. Sonunda benim için bunu yapan şey, test verileri için kullandığım bir dizi sözlüğün gerçek beyanını birden çok .appendifadeye bölmekti.

// This causes indexing/building to hang...
var test = [ [ "a": false, "b": "c" ],
             [ "a": false, "b": "c" ],
             [ "a": false, "b": "c" ],
             [ "a": false, "b": "c" ],
             [ "a": false, "b": "c" ],
             [ "a": false, "b": "c" ] ]

// This works fine.
var test = [ [ "a": false, "b": "c" ] ]
test.append([ "a": false, "b": "c" ])
test.append([ "a": false, "b": "c" ])
test.append([ "a": false, "b": "c" ])
test.append([ "a": false, "b": "c" ])
test.append([ "a": false, "b": "c" ])

Ayrıca, değeri ne olursa olsun, bu dizideki 6. giriş benim için soruna neden olan şey; beş iyi çalışıyor.


Aynı çözüm bir sözlükle benim için çalıştı. Doğrudan başlatmak, sonsuza kadar çalışan bir indekslemeye neden oldu. Onu init()adım adım başlatmak mükemmel çalışıyor. .xcworkspaceDosyayı da silmem gerektiğini belirtmeye değer .
jboi

Hiçbir sözlük olmadan benim için düzeltildi. Bildirimde 8 elemanla yeterli olan bir demet dizisi. 11 öğeli eklere geri dönmek zorunda kaldı. Kesin kırılma noktasını bulma zahmetine girmedi, ancak 10 kat daha hızlı inşa ediyor. Mavericks'te Xcode sürüm 6.1.1 (6A2008a).
Josh

Ben de tam olarak 6 elementle sorunu çözdüm. 5 iyiydi.
Justin Lau

Bu bir XCode sorunu mu yoksa bir derleyici sorunu mu?
Sljux

4
Bunu Xcode 7.3'te 229 öğelik bir dizi değişmeziyle deneyimledim. Parçalamak yerine, Swift'in türü çıkarmasına izin vermek yerine bir tür bildirimi ekledim. Bunu yaptıktan sonra işe yaradı.
Brigham

34

Benim için tek çalışan çözüm, türetilen tüm verileri silmek (sadece mevcut proje için değil, tüm klasörü temizlemek) ve ardından Xcode'u yeniden başlatmaktır.

  1. Xcode'da Dosya / Tercihleri ​​Aç

  2. Açılır pencerenin en sağındaki Konumlar'a tıklayın

  3. "/Users/Mac/Library/Developer/Xcode/DerivedData"....it'in yanındaki küçük ok simgesine tıklayın, sizi bir DerivedData klasörünü (önceki projelerinizden türetilmiş tüm verileri içeren) bir Xcode klasörüne götürür. .)

  4. DerivedData klasörünü SİL


1
@TravisM. Adımları takip ettin mi? Pencere, Düzenleyici, Projeler, Türetilmiş Verileri Sil'e giderseniz çalışmaz. Tercihlerden geçmeniz gerekiyor.
ericgu

@ericgu Evet, ama işe yaramadı. Sorunumu düzelttim, ancak tek seferde sabit kodlanmış verilerle bir sözlüğü başlatmakla ilgiliydi. Sabit kodlanmış verileri her seferinde bir satır eklemek için kodu taşıdığımda, donma / yavaşlama sorunları hemen ortadan kayboldu.
Travis M.

Makinemde ~ / Library / Developer / Xcode / DerivedData / konumundaki klasör. Xcode'da Pencere> Projeler'e giderek de bulabilirsiniz.
Suragch

Teşekkürler. Bu yardımcı olur. "Sonsuza kadar indeksleme" sorunu, cocoaPod sürümümü güncelledikten ve bir pod kurulumu gerçekleştirdikten hemen sonra başlıyor.
WKL

11

CocoaPods kullanıyor musunuz? Aynı sorunla bugün erken saatlerde karşılaştım. (XCode 6.1.1 kullanarak)

Sorunu düzeltmek için içindeki her şeyi ~/Library/Developer/Xcode/DerivedData, Podsproje dizinimdeki klasörü ve <project>.xcworkspace.

Daha sonra terminali açtım, proje dizinime gittim ve pod installtekrar koştum .


1
Evet ediyorum. Şimdilik Xcode iyi davranıyor. Ama yine de zaman zaman sourcekit çökme hatası veriyor. Çözümüm türetilmiş veri klasörünü silmek.
leonard

Bunun başka biri için de işe yaradığını görmek güzel :). Görünüşe göre xCode CocoaPod Kitaplıklarını indekslemeye çalışıyor ve bir yerde sıkışıp kalıyor.
Michael Schinis

1
Pods klasörünü ve <project> .xcworkspace dosyasını silmek ve ardından pod install'ı çalıştırmak yeniden çalıştı.
KML

9

Bugün aynı sorunu yaşadım. Xcode 6.3.2, orta ölçekli Swift projesi. Bir noktada indekslemeye başladı ve indekslemeyi asla bitirmedi. Buna neden olan kod, [Dize: [Dize]] türünde bir sözlüktü, dolayısıyla değer olarak dize dizilerini içeren bir dize-anahtar dikte eder. Bunlardan ikisi A'dan Z'ye anahtarlara sahipti ve bu 26 girişin her biri 5 ila 10 dizeli bir dize dizisi içeriyor.

Elde edilen verileri temizlemek yardımcı olmadı. Sadece bu diktatörleri yorumlamak yeniden başlamasını sağladı.

Dürüst olmak gerekirse, bu çok saçma! Apple'ın Xcode'u düzeltmesi gerekiyor! Swift projelerini derlerken zaten korkunç derecede yavaş ama bunun gibi hatalar bir şovu engelliyor. İşimi bununla düzgün yapamıyorum!


6

Hala bu sorunu yaşayanlar için, bu, nesnelere tek tek girmenizi engelleyen, zevk aldığım bir geçici çözüm:

// instead of this, which freezes indexing
let keys = [keyQ, keyW, keyE, keyR, keyT, keyY, ... keyM]    

// and instead of this, which is ugly & lengthy
var keys = [KeyboardKey]()
keys.append(keyQ)
keys.append(keyW)
...
keys.append(keyM)

// use this:
var keys = [KeyboardKey]()
keys.appendContentsOf([keyQ, keyW, keyE, keyR, keyT, keyY, ... keyM])

1
Vay be ... Bende de aynı sorun vardı. Teşekkürler! Apple'a bir hata olarak bildirdim. Yaptığın şeyi yapmak benim için işe yaramadı. Uzun dizimi her biri beş veya daha az eleman içeren daha küçük dizilere bölmek zorunda kaldım.
ma11hew28

5

Benim için yukarıdakilerin hepsini başarılı olmadan denedim; ama tek yapmam gereken türetilmiş veri klasörünü silmek, sonra başka bir rastgele proje açmak, indekslemesini beklemek ve şimdi orijinal (arızalı) projem çalışıyor!

Geliştirme dünyasına bir iyilik yapın ve hızlı derleyicilerinizi açık kaynak yapın - bu yüzden hepimiz yetersizliğiniz tarafından engellenmeyiz.


3

Xcode Sürüm 7.3 (7D175) kullanıyorum

Sanırım altta yatan bir sorunu çözmüş olabilirim. İndeksleme aşamasında takıldığım iki örnek var:

  • Bir değişkene atadığım ve tür imzasını atladığım bir kapatma oluşturdum. Xcode'un bu tür çıkarım adımıyla ilgili sorunları olduğunu düşünüyorum. Doğru hatırlıyorsam, argümanlardan biri aşırı yüklenmiş bir kurucuya sahip bir CGPoint idi. Benim hipotezim, kapanışımın argüman olarak kabul edebileceği birçok olasılığın olduğu.

  • Bir fabrika yöntemini, bir türün örneklerini döndürmek yerine, ortak bir temel sınıfa sahip birçok türün örneklerini döndürebileceği şekilde yeniden düzenledim. Görünüşe göre fabrika yöntemini her nerede kullanırsam, ortaya çıkan nesneyi belirli bir türe dönüştürmek zorunda kaldım (ya? İle veya onu belirli bir türü kabul eden bir değişkene atayarak) Yine tür çıkarım adımı bozuk görünüyor.

Daha önceki bireylerin bahsettiği sözlük beyannamelerinde de aynı şey devam ediyor gibi görünüyor. Apple ile bir hata raporu verdim.


2

6.1'e yükselttikten sonra aynı sorunu yaşadım. Xcode, belirli bir hata mesajı oluşturmadan derleme veya indekslemede takılıp kalır.

Sorun nihayet, swift dosyalardaki bazı uzun ifadelerin birden çok kısa ifadeye bölünmesiyle çözüldü. Programımın bir kısmı, daha uzun bir dizgi oluşturmak için birçok farklı dize değişkenini birleştiriyor. Bunları tek bir ifadede birleştirme ve toplama atama operatörünü kullanma girişimleri başarısız oldu. Aşağıdakine benzer bir şey yaparak çalışmasını sağlayabildim (basitleştirilmiş):

var a = "Hello"
var b = " "
var c = "World"
var d = "!"
var partA = a + b
var partB = c + d
var result = partA + partB

Bu fikri, önceki Xcode sürümünde birçok kez aşağıdaki hatayı almaktan aldım "İfade makul bir sürede çözülemeyecek kadar karmaşıktı; ifadeyi farklı alt ifadelere ayırmayı düşünün."

Bu yardımcı olur umarım


Evet teşekkürler, aslında bu tür önerileri aldım. Ayrıca dosyalarımdan birinin uzunluğunu 1500 satırdan yaklaşık 1200'e düşürdüm. Ve tabii ki yeni bir proje oluşturdum ve tüm dosyaları tek tek buraya aktardım. Sonra nihayet geri geliyor. Hangisinin nihai kurtarıcı olduğundan pek emin değilim.
leonard

Swift'de uzun bir ifadeyi bölmek işimi yaptı.
MandisaW

2

Ben de aynı problemle uğraştım. Bahsedilen iki çözümü (türetilmiş verileri ve .xcworkspace'i silme) hiçbir başarı ile denedim. Ayrıca, kodun çoğunu yavaş yavaş yorumlamayı ve neredeyse hiçbir şey kalmayana ve indeksleme hala takılı kalana kadar dosyaları kaldırmayı denedim.

Benim için çalışan bir çözüm buldum, projeyi indekslemede sorun olmayan daha eski bir Xcode Versiyon 6.1 (6A1030) ile açtım ve daha önce kullandığım en son Xcode Versiyon 6.1'e (6A1052d) geri döndüm ve indeksleme yapıldı düzeltildi ve iyi çalışmaya devam etti.

Vardığım sonuç, bunun gelecekteki sürümlerle iyileştireceğini umduğum Xcode Version 6.1 (6A1052d) ile ilgili bir hata olduğu.

Sorun arada bir geri geliyor, her seferinde aynı düzeltme çalışıyor. Sanırım başka bir çözüm eski Xcode Sürüm 6.1'e (6A1030) bağlı kalmak olabilir, ancak iOS 8.1 çalıştıran cihazlarda çalışmayacak ve en son hata düzeltmelerine sahip olmayacak.


Sürekli indeksleme sorununu çözmek için etrafındaki önerilerin çoğunu denedim ve bu benim için çalışan tek şeydi. Daha eski bir Xcode 6'ya sahip değildim ama Xcode 5'im vardı. Oluşturulamazdı, ancak indeksledi ve bundan sonra Xcode 6.1 başarıyla indekslendi.
SarahR

Bunun geçici bir çözüm olduğunu ve birkaç saat sonra tekrar yapmak zorunda olduğumu söylemeyi unuttum.
SarahR

2

Bunu Xcode 8.3.3 ile denedim. İşte sonuçlarım:

İndekslemenin askıda kalmasına neden olacak mükemmel bir Swift kodu yazabilirsiniz.

İndeksleme askıda kaldığında kilitleniyor. Swift kodunu indekslemenin askıda kalmasına neden olmayacak bir şeye geri döndürmek yardımcı olmaz, yine de kilitleniyor.

Projeyi kapatmak ve yeniden açmak bu durumda yardımcı olmuyor.

Xcode'dan çıkmak ve yeniden başlatmak yardımcı olur. Endeksleme artık askıda kalmayacak (yani, kodu tekrar askıda kalmayacak bir şeye değiştirdiyseniz).

Mac'inizi yeniden başlatmak, gerekli olmasa da yardımcı olur.

Asılı kalmanın nedeni mükemmel derecede iyi Swift kodudur. Benzediğim bir örnek

if let date = function1()
?? function2()
?? function3()
?? function4()
?? function5()
?? function6()
?? function7()
?? function8()
?? function9()
?? function10() {
    return date
}

Endeksleme askıda kalacaktı. "??" ifadelerinin çoğuna yorum yaptım. satırlar ve iyiydi (Xcode'dan çıkıp yeniden başlattıktan sonra). Bir satır birbiri ardına yorumlanmamış. Birkaç satırda sorun yoktu, sonra bir sonraki satırın yorumunu kaldırmak onu asacaktı.

Görünüşe göre yardımcı olan tek şey kodunuzu değiştirmektir.


2

Xcode'umda çözüm, tüm yedek pencereleri kapatmaktı. Bazı nedenlerden dolayı birçok açık pencere Xcode'u çok yavaş hale getirir.


Benim için bu da çözümdü, daha önce aynı sayıda açık pencerede uzun süre iyi çalıştığı için şaşırtıcıydı
Christian

1

Sonunda sorunu "çözdüm", ancak bu geçici bir çözüm.

Başka bir proje oluşturdum ve ona birer birer dosya ekledim. Sonra "çok uzun" bir viewcontroller.swift dosyası buldum. Sonra kodlarını modüllere böldüm ve tekrar tekrar kullanılan kodları başka bir hızlı dosyada işlevlere dönüştürdüm. Ayrıca internette uzun ifadelerin daha kısa ifadelere bölünmesi önerisini aldım. Daha sonra indeksleme çalışır ve derleme çalışır.

Bu yüzden şimdilik "çözdüm".

AMA, bunun doğru olduğunu sanmıyorum. Xcode IDE, benim "çok uzun" hızlı dosyamı, yalnızca 1500 satırlık işlemden fazlasını yapabilmelidir. Xcode 6.1 zaten Xcode 6.0.1'den bir yükseltme olmasına rağmen, bunun kesinlikle bir hata olduğuna inanıyorum (uzun süredir var).


1

Benim için Xcode uygulamasını sildim ve tekrar indirip yükledim. Bu sorunu çözdü, en azından şimdi.


1

Xcode indeksleme genellikle öneri için kodunuz için ve hikaye panolarında size yardımcı olmak gibi diğer şeylerin yanı sıra otomatik tamamlama ve bunun tersi. Ancak xcode projenizi daha hızlı hale getirmek için onu terminal üzerinden kapatabilir / açabilirsiniz.

İndeksleme
varsayılanlarını kapat com.apple.dt.XCode yaz IDEIndexDisable 1 İndeksleme varsayılanlarını aç com.apple.dt.XCode IDEIndexDisable 0 yaz

Ancak iyi RAM'e sahip hızlı bir Mac kullanmak için daha iyi bir yaklaşım.


2
İndekslemenin kapatılması Xcode'u ciddi şekilde sekteye uğratır ve yapılmamalıdır. Birisine yeni bir Mac satın almasını söylemek asla cevap olmamalı, 2 yaşındaki bir dizüstü bilgisayar en son Xcode'u işleyebilmelidir.
Knight0fDragon

macOS 10.13 Beta 7, indeksleyici çalışır çalışmaz hem Xcode 9 Beta 6 hem de Xcode 8'i çökerten bir şey sundu. Kapatılması, sakat bir sürümle bile Xcode'u kullanmaya devam etmenin tek yoluydu.
Pegolon

1

Xcode 11.5 (11E608c) ve hala aynı sorunlar, orijinal sorudan 6 yıl sonra. Keşke bu soruda elmayı "işaretleyebilseydim", böylece bu karışıklığı görebilsinler. Bu büyük bir proje (> 1000 dosya) ve saatin altındaydım, bu yüzden donma indeksini fark ettiğimde 100'den fazla dosya değişti ve geri dönemem.

Her şeyi denedim:

  1. Türetilmiş verileri temizle ve derle
  2. Xcode'u yeniden başlatın, mac'i yeniden başlatın
  3. kaldır ve kaynak ekle
  4. Sözlükler, edebi vb. Arandı

Sorun bir dizi oluşturma idi:

private var overlayColors: [UIColor] = [UIColor(hex: "#b71c1c"), UIColor(hex: "#4a148c"),
                                        UIColor(hex: "#880e4f"), UIColor(hex: "#1de9b6"),
                                        UIColor(hex: "#f50057"), UIColor(hex: "#311b92"),
                                        UIColor(hex: "#f44336"), UIColor(hex: "#651fff"),
                                        UIColor(hex: "#d500f9"), UIColor(hex: "#3d5afe"),
                                        UIColor(hex: "#bf360c"), UIColor(hex: "#0d47a1"),
                                        UIColor(hex: "#006064"), UIColor(hex: "#2979ff"),
                                        UIColor(hex: "#ff6f00"), UIColor(hex: "#1a237e"),
                                        UIColor(hex: "#795548"), UIColor(hex: "#004d40"),
                                        UIColor(hex: "#00e676"), UIColor(hex: "#01579b"),
                                        UIColor(hex: "#33691e"), UIColor(hex: "#827717"),
                                        UIColor(hex: "#76ff03"), UIColor(hex: "#ffc400"),
                                        UIColor(hex: "#e65100"), UIColor(hex: "#00b0ff"),
                                        UIColor(hex: "#ff3d00"), UIColor(hex: "#616161"),
                                        UIColor(hex: "#263238"), UIColor(hex: "#ff1744")]

Kötü swift dosyasını keşfetmeme yardımcı olan şey, xcode dondurulmuş indeksleme aşağıdaki adımları uyguladığımda oldu

  1. etkinlik izleyicisini açın -> "hızlı" işlemi -> işlem bilgilerini gösterin -> Dosyaları ve Bağlantı Noktalarını açın. Bu size, bu işlemin hangi dosyaların çalıştığının bir listesini, olası kötü dosyalar listenizi ayrıntılı olarak inceleyecektir.
  2. Diğer kullanışlı araç ise bu komut dosyası SOURCEKIT_LOGGING=3 /Applications/Xcode.app/Contents/MacOS/Xcode &> ~/Documents/xcode.log, Xcode'u 3. seviye ayrıntılı olarak başlatacak ve günlük dosyasında oturum açmaya başlayacaktır.
  3. Günlük dosyasında swift dosyalarınız için son girişleri arayın örn: "my_project / Source / App /"

Tam bir çözüm değildir, ancak ayrıntıya inmek ve nereye bakılacağını bilmek yararlıdır.

etkinlik izleyicisini açın -> "hızlı" işlemi -> işlem bilgilerini gösterin -> Dosyaları ve Bağlantı Noktalarını açın.


0

Onlar anlayana kadar 6.0.1'e geri dönmenin bir sakıncası yoksa, benim için işe yarayan buydu. 6.1 ve 6.1.1 ile aynı sorunu yaşıyordum. Şimdi iyiyim. 6.2 çıktığında deneyeceğim.

Apple yazılımının önceki sürümlerini resmi geliştirme sitesinde bulabilirsiniz: https://developer.apple.com/downloads/index.action

Bunu yaparsanız, önce mevcut Xcode kopyanızı sildiğinizden emin olun.


0

Xcode 6.1.1'i aynı MacBook Pro'da hızlı dosyalar ile kullanıyorum.

Bir 3B dizgi dizisine satır eklemeye devam ederken, Xcode birden kullanılamaz hale geldi ve şimdi hiçbir şey yapamıyorum.

6.1'e dönmeye çalışacak ve umarım sorun ortadan kalkacaktır.


Bende de aynı sorun var. Bir dizi sözlük ekledikten sonra xcode kullanılamaz hale geldi ... Çözüm buldunuz mu?
Almazini

Daha iyi çalışan Xcode 6.1'e geri döndüm. Sonsuza kadar indekslemede takılıp kalmadı, ama bazen 4 saniyeliğine plaj topunu yazıp alırdım. Genel olarak işleri halletmek için yeterince kod yazabildim. Kodumun hiçbirini değiştirmedim. Xcode 6.1'de macbook pro'nun pili çok etkilenmiş gibi görünmese de, 2013 ortalarında 6.1.1 çalıştıran macbook air'ımda pil ömrü kesinlikle tükendi. Xcode'u başlattıktan sonra ~ 12 saatten 2 saate kadar çıkıyor.
gardner888

0

Bunu Xcode 6.3.2'de görüyorum. Yayınlandıktan bir yıl sonra derleyicinin çalışmasını gerçekten ummuştum, ama ne yazık ki.

Yukarıdaki çözümlerden hiçbiri işe yaramazsa, kodunuzu sözdizimi hataları için kontrol etmeyi deneyin. Yeniden düzenleme sürecinde bir kapanış çıkardım, ancak parametreleri nitelemeyi unuttum:

    let hangsInsteadOfError = { l, r in
        return l.nameFirst < r.nameFirst
        || l.nameFirst == r.nameFirst && l.nameLast < r.nameLast }

    let fixingErrorAvoidsHang = { (l:User, r:User) -> Bool in
        return l.nameFirst < r.nameFirst
            || l.nameFirst == r.nameFirst && l.nameLast < r.nameLast }

Swift'de çalışmaktan bir şey öğrendiysem, sorun teşkil eden kodu bulmak için çok fazla geriye gitmek zorunda kalmamak için aşamalı olarak çalışmaktır.


0
  1. İndeksleme durumunuz bir "Gösterge çemberi" mi yoksa "İlerleme çubuğu" mu?
  2. Bu bir "Gösterge çemberi" ise, bu zaten başlangıçta takılı olduğu anlamına gelir.
  3. Diğer projelerinizi açın ve kontrol edin, hepsi aynıysa, bunun bir sistem sorunu olduğu anlamına gelir.
  4. Sadece bilgisayarınızı yeniden başlatın ve her şey yoluna girecek.

0

Xcode 8.2 kullanıyorum ve bu problemle de bittim. Karmaşık bir tuple değişkeni tanımladıktan sonra başladı - tuple alt dizisine sahip bir tuple dizisi. Tuple alt dizisi programlı olarak hesaplanan bir özelliğe sahip olduğunda işler gerçekten yavaşlar.

Diğer bazı yanıtların da belirttiği gibi, indeksleme sonsuza kadar sürer ve değişkenin türlerini anlamaya çalıştığına inanıyorum.

İlk olarak, dahil edilen türlerle değişkeni açıkça tanımlayarak sorunu çözdüm. Özelliği güncellerken, değişkeni tanımlarken hesaplamak yerine önce onu hesaplıyorum, sonra onu demete atıyorum.

İşte örnek bir kod.

var sectionTuples: [(section: String, rows: [(name: String, subtitle: String)])] = []
let subtitle1: String = "" // something calculated dynamically
let subtitle2: String = "" // something calculated dynamically
sectionTuples = [(
section: "Section 1", rows: [
(name: "name1", subtitle: subtitle1),
(name: "name2", subtitle: subtitle2)
])]

Sonuç olarak, Xcode'un karmaşık yapılar çıkarmasına izin verilmez.


0

Ben de aynı sorunu yaşıyordum. Xcode'um 8.2.1. Ama benim durumumda, 33 anahtar-değer çifti içeren bir sözlük dizisi oluşturmak istedim. İndekslemede takılıp kalan şu şekilde yapıyordum:

var parameter = [String : AnyObject]()
var finalArray = [parameter]

for item in listArray
{
    parameter = ["A": item.a as AnyObject, "B": item.b as AnyObject, "C": item.c as AnyObject, ... , "Z": item.z as AnyObject]

    finalArray.append(parameter)
}

Aşağıdakiler benim için çalıştı:

var parameter = [String: AnyObject]()
var finalArray = [parameter]

for item in listArray
{
    parameter["A"] = listArray.a as AnyObject
    parameter["B"] = listArray.b as AnyObject
    parameter["C"] = listArray.c as AnyObject
    parameter["D"] = listArray.d as AnyObject 
    .
    .
    .
    parameter["Z"] = listArray.z as AnyObject 
    finalArray.append(parameter)
}

0

Ben de bu sorunu yaşadım ve "+" operatörüyle ifadeleri kaldırarak / değiştirerek çözdüm.

Ben bunu değiştirdim:

var mainArray = arrayOne + arrayTwo + arrayThree + arrayFour + arrayFive

Buna:

var mainArray = arrayOne
mainArray += arrayTwo
mainArray += arrayThree
mainArray += arrayFour
mainArray += arrayFive

Sorunu çözdü.

Makinem 2013'ün sonlarında maksimuma çıkmış bir MBP


Kesinlikle benim deneyimim. Mükemmel bir Swift koduyla kilitleniyor ve bunu düzeltmenin tek yolu kodu değiştirmektir.
gnasher729

0

Xcode 6.1.1'e güncellemek isteyebilirsiniz

Resmen yayınlandı ve bizim için indeksleme sorunu çözüldü. Güncelleme açıklamasında, kararlılık düzeltmeleri uyguladıklarını söylüyor, bu nedenle daha kararlı bir şekilde davranması çok muhtemeldir.


7
İlginç. Benim için, 6.1.1 tanıtıldı 6.1'de cezası açıyordu bir proje ile, sonsuz indeksleme sorunu. işareti
Pascal Bourque

Anlıyorum. Bizim durumumuzda, uzantı sınıflarını kullanarak ifadeleri basitleştirdik ve sınıf boyutlarını küçülttük. Bunu yapmak zorunda olmamız oldukça saçma ama yapmamız gereken buydu. Ve şimdilik hile yapıyor gibi görünüyor. Ayrıca satırları yorumlayarak, Swift derleyicisinin düşündüğü gibi, kodun hangi parçasının gerçekte "aşırı karmaşık" olduğunu daralttık ve karmaşıklığı olabildiğince azalttık. Umarım bu oldukça can sıkıcı bir hal alır almaz bunu düzelteceklerdir.
Angel Naydenov

0

Xcode 6.2 beta benim için sorunu çözdü. Şimşek hızında değil, ama en azından sonsuza kadar indekslenmiyor. Beta gelmez değil sen beta gibi yapmazsanız silmeniz yeterlidir; böylece, normal Xcode tesisatının üst üzerinde yükleyin.

Beta dahil çeşitli Xcode indirmeleri>


0

Şöyle ifadelerim vardı:

let x = (value as? Int) ?? someDefault

Ayrıca

guard let x = (dateFormatter().string(from: Date()) + msg + "\n").addingPercentEncoding(...) else { ... }

Yani önemli olan, dosyanızı yalnızca anaokulu düzeyinde ifadeler içerecek şekilde yeniden yazmaktır ve indeksleme sorunu ortadan kalkacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.