Swift'de 'Çözümlenmemiş Tanımlayıcı Kullanımı'


93

Bu yüzden bir uygulama geliştiriyorum ve her şey harika çalışıyor. Ama bugün her zamanki gibi yeni bir sınıf yaptım ve nedense bu sınıfta diğer sınıflardan Public / Global değişkenine erişemiyorum. Diğer tüm sınıflar yapabilir, ama şimdi ne zaman yeni bir sınıf oluşturmaya çalışsam yapamam. Bu nasıl düzeltilebilir?

Swift ve Xcode 6 kullanıyorum.

İşçi sınıfı:

import UIKit
import Foundation
import Parse
import CoreData

var signedIn = true

class ViewController: UIViewController {

Yeni Sınıf:

import UIKit

class NewClass: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        signedIn = false

}

Ama signedIn = false

Şu hatayı alıyorum:

çözülmemiş tanımlayıcı "imzalı" kullanımı


ve evet, bu sınıfı birkaç kez sildim ve yeniden oluşturdum
Apple Geek

Lütfen kodunuzu hem çalışıyor hem de çalışmıyor olarak gösterin.
Wez

Kullandığınız XCode / Swift sürümünü belirtebilir misiniz (beta sürüm mü yoksa değil mi)?
lchamp

@Ichamp Xcode 6.1 beta değil.
Apple Geek

1
Bu tam kodunuz mu? girintiniz nedeniyle,}viewDidLoad()
Wez

Yanıtlar:


296

Olası sorunlardan biri, yeni sınıfınızın diğerinden farklı bir Hedefe veya farklı Hedeflere sahip olmasıdır.

Örneğin, diğeri yokken diğerinin bir test hedefi olabilir. Bu özel durum için, tüm sınıflarınızı test hedefine dahil etmeniz veya hiçbirini içermemeniz gerekir.

Hedefler


Sınıf farklı bir hedefteyse, onu hızlı dosyanızın üstüne içe
aktardığınızdan

2
hehe, bu bir sorundu. Sınıf için bir hedef belirlemeyi unuttum. Tnx :)
tBug

Dostum, bunu çözmek için birkaç saat harcadım. Ne kadar aptalca bir hata mesajı. Sözdizimi Hatası bile daha iyidir!
19'da

evet .. bir test projesi için hedef belirlenmedi !! teşekkür ederim
reidisaki

1
Benimki içerideydi, ancak işaretini kaldırdım ve tekrar kontrol ettim, bu da bu sorunu çözdü VE otomatik tamamlama / zeka anlayışım geri geldi!
Stephen J

11

Bir dosyayı yeniden adlandırdıktan sonra bu sorunu yaşadım. Dosyayı Xcode içinden yeniden adlandırdım, ancak daha sonra Xcode dosyadaki işlevi bulamadı. Temiz bir yeniden inşa bile sorunu çözmedi, ancak projeyi kapatıp yeniden açmak, yapının çalışmasını sağladı.


Bu aynı zamanda bir dosyanın konumunu değiştirmek için de işe
yarar

tam olarak doğru dosya referanslarını kaldırdım ve sonra tekrar ekledim. ve her şey çalıştı
Hamed Nova

7

Swift'de 'Çözümlenmemiş Tanımlayıcının Kullanımı', bir kitaplığı içe aktarmayı unuttuğunuzda da olur. Örneğin şu hataya sahibim: görüntü açıklamasını buraya girin

Unuttuğum UIKit

UIKit'i içe aktar


1
import AVFoundation
Jenita _Alice4Real

4

Bazen derleyicinin sınıfınızdaki sözdizimi konusunda kafası karışır. Kaynağa başka bir yerden yapıştırırsanız bu çok olur.

"Çözülmemiş" kaynak dosyasını minimum düzeye indirmeyi, temizlemeyi ve oluşturmayı deneyin. Başarıyla oluşturulduktan sonra tüm karmaşıklığı sınıfınıza geri ekleyin.

Bu, Xcode'u yeniden başlatmak işe yaramadığında benim için uzaklaştı.


4

Bu hatayı gördüğüm başka bir yer, projenizin birden çok hedefi VE birden çok köprüleme başlığı olduğu zamandır . Paylaşılan bir sınıfsa, kaynağı tüm köprüleme başlıklarına eklediğinizden emin olun.

Sol Issue Navigator paneline bakmak iyi bir ipucu; kök nesne, şikayeti gönderen hedefi gösterecektir.


3

Benim için bu hata, iç içe geçmiş bir işlevi çağırmaya çalıştığım için oldu . Ben onu tamir için yapmak zorunda tek şey fonksiyonunu bir araya getirmek olduğunu dışarı görünür bir kapsamı.


"İşlevi görünür olduğu bir kapsama getirin" derken, onu herkese açık olarak işaretlemeyi mi kastediyorsunuz?
Barry Jones

Hayır. Yalnızca işlevi farklı bir kapsama taşımak / sürüklemek, yani sınıf kapsamında
Honey

3

Benim durumumda, aynı Hedef Üyelikte olan bir Object-C dosyam vardı. #import "YourObjectCFileHeader.h"Dosyanın içine ekleyerek düzelttimBridging-Header.h


1

Çünkü ilan etmedin. Başka bir sınıftaki bir değişkeni kullanmak istiyorsanız kullanmalısınız

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var DestViewController : ViewController = segue.destinationViewController as ViewController
    DestViewController.signedIn = false
}

Bu kodu NewClass kodunun sonuna koymalısınız


evet ama diğer sınıfları da kullandım ve onlar olmadan iyi çalıştılar, tam da bu yeni dersi oluşturduğumda.
Apple Geek

2
Bu işe yaramaz, signIn değişkenini sınıfının içinde değil, genel kapsamda bildirmiştir.
Sam

1

Senin NewClassmirasın UIViewController. Sen beyan signedIniçinde ViewController. Bu NewClassdeğişkeni tanımlayabilmek istiyorsanız , NewClassmiras aldığınız bir sınıfta bildirilmesi gerekir .


1

Bu hatayı Objective-Swift Projemde Mantle Framework için aldım. Denediğim şey

  1. İçe aktarmanın Bridging-Header.h dosyasında olup olmadığını kontrol edin
  2. Mantle.h dosyasındaki Çerçeve için Hedef Üyeliği aşağıdaki ekran görüntüsünde gösterildiği gibi değiştirin.

Özel Üyelik arasında geçiş yapın, önce projeyi oluşturun, sonunda hatalarla sonuçlanır. Ardından Mantle.h için görünen tüm çerçeveler için projeyi Genel Üyelik ile oluşturun dosyası başarıya ulaşmalısınız.

Bu sadece Objective-C Swift projesinde çoklu çerçeve ile inşa etme hatasıdır.

görüntü açıklamasını buraya girin


0

Bu, oluşturduğunuz bir sınıfla ilgiliyse, sınıfın iç içe olmadığından emin olun.

Fe

A. swift

class A {

   class ARelated {

   }
}

arama var b = ARelated() 'Çözümlenmemiş tanımlayıcı kullanımı: A ile ilgili' verecektir.

Aşağıdakilerden birini yapabilirsiniz:

1) aynı dosyada istenirse sınıfları ayırın:

A. swift

class A {

}

class ARelated {

}

2) Aynı yapınızı koruyun ve alt sınıfa ulaşmak için çevreleyen sınıfı kullanın:

var b = A.ARelated


0

Aptalca bir hata yaptım. Cocoapod çalışma alanında kodu güncellerken sınıftan genel veya açık olarak bahsetmeyi unuttum.

Lütfen ayrı bir çalışma alanında çalışıp çalışmadığını kontrol edin.


0

Değişkeni bildirmeyi unuttunuz. Sadece varönüne koysignedIn = false


Bu konuda eksik kapatma parantezi ile birlikte (nakledilen kod sadece bir yazım hatası olduğunu farz ediyorum viewDidLoad.
şim

0

Sorunum, programımı kokoapodlarından biriyle aynı adla çağırmaktı. Bir çatışmaya neden oldu. Çözüm: Farklı adda bir program oluşturun.


0

Bu, doğrudan kod örneğinizle ilgili değil, genel olarak hata ile ilgilidir. Burada yazıyorum çünkü Google bu hatayı bu soruya yönlendiriyor, bu yüzden diğer geliştiriciler için faydalı olabilir.


Bu tür bir hatayı alabileceğiniz başka bir kullanım durumu, başka bir sınıftaki yönteme bir seçici eklediğiniz zamandır, örneğin:

private class MockTextFieldTarget {
private(set) var didCallDoneAction = false
    @objc func doneActionHandler() {
        didCallDoneAction = true
    }
}

Ve sonra başka bir sınıfta:

final class UITextFieldTests: XCTestCase {
    func testDummyCode() {
        let mockTarget = MockTextFieldTarget()
        UIBarButtonItem(barButtonSystemItem: .cancel, target: mockTarget, action: MockTextFieldTarget.doneActionHandler)
        // ... do something ...
    }
}

Son satırında sadece arayacağını olursa #selector(cancelActionHandler)yerine #selector(MockTextFieldTarget.cancelActionHandler), olsun istiyorum

çözülmemiş tanımlayıcı kullanımı

hata.

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.