Sam J
Sam J

Reputation: 343

Xcode won't recognize a new Swift class

I have created a new Swift class in a new file

import Foundation

class RecordedAudio: NSObject{
    var filePathUrl: NSURL!
    var title: String!
}

and now I want use it inside another class by creating a new object.

import UIKit
import AVFoundation

class recordSoundsViewController: UIViewController, AVAudioRecorderDelegate {
    var audioRecorder: AVAudioRecorder!
    var recordedAudio: RecordedAudio! // new object gives error

But Xcode is giving me the error "Use of undeclared type RecordedAudio" so I got stuck there. A similar question has been posted here: How do I import a Swift file from another Swift file? but none of those solutions worked for me. BTW, this is part of the Udacity swift class. Thanks, any help would be appreciated.

Upvotes: 24

Views: 17752

Answers (6)

matt
matt

Reputation: 535121

In the Project Navigator on the left, select the file where you declared RecordedAudio.

Now, in the File inspector on the right, look at the Target Membership. The app target (not the Test target) should be checked, similar to this:

enter image description here

If not, check it! And now all will be well.

Upvotes: 66

C. Kontos
C. Kontos

Reputation: 1258

Tried the ownership toggling, cleaning, restarted x-code, deleted and re-adding reference but no result.

A pod install fixed it for me, weird because my class was not from another module or library.

Upvotes: 0

Eray Alparslan
Eray Alparslan

Reputation: 814

If your class is in another Module, please make sure that your class and the class initializers have the public access modifier.

Upvotes: 5

Hari Honor
Hari Honor

Reputation: 8914

I just had to do the Full Monty to get it to work...

  1. Comment out referencing lines
  2. Fix other bugs to ensure a build
  3. Cmd+Shft+K (Clean build folder)
  4. Nay...let's delete the build folder: /Users/[YOU]/Library/Developer/Xcode/DerivedData/project-name-ADM2KD...
  5. Restart Xcode
  6. Build
  7. Uncomment our referencing lines

Also maybe add @objc to the line above your class definition and maybe make it public class just to be explicit and possible add public to your methods as well. Oh and make sure you are subclassing NSObject.

If you are stuck getting your initialiser to show up, I've also just noticed that Swift 4.2 has lots more problems here. I switched back to Swift 3. No problems...

Upvotes: 4

NicklasF
NicklasF

Reputation: 921

For me, I had to check the same target memberships on the class as in the ViewController (I had a TodayExtension)

Upvotes: 1

Lukas Kalinski
Lukas Kalinski

Reputation: 2243

In my case I had to remove the references from the project navigator, and then add them again (the target membership was not the problem).

Upvotes: 4

Related Questions