質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

3回答

520閲覧

Use of unresolved identifier 'MyClass' というエラーを解決したい

wesker.alice

総合スコア45

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/05/19 06:09

編集2020/05/19 08:22

前提・実現したいこと

書籍「詳細!Swift iPhoneアプリ開発入門ノート: iOS 12+Xcode 10対応」を読みながら学んでいる初学者です。
P163の「別のファイルに定義してあるクラスを利用する」でエラーが解決できずに困っています。

発生している問題・エラーメッセージ

発生している問題
MyClass.swiftファイルを読み込むためのimport文は必要ないとのことなので、MyClass.seiftに記述したコードをViewController.swift側で読み込んでハローが表示されるはずなのですが、エラーの詳細を調べてみると「宣言していない変数等を記入しているために出るエラー」とのことで、Myclass.swiftからうまいこと引っ張ってこれていないように見受けられました。

エラーメッセージ

swift

1Use of unresolved identifier 'MyClass'

該当のソースコード

ViewController.swift

swift

1class ViewController: UIViewController { 2 3 4 override func viewDidLoad() { 5 super.viewDidLoad() 6 let myObj = MyClass() //←ここでエラーが出ます。 7 myObj.hello() 8 } 9 10//★ 11}

MyClass.swift

swift

1import Foundation 2 3//MyClassクラスの定義 4class MyClass { 5 let msg = "ハロー" 6 func hello(){ 7 print(msg) 8 } 9}

試したこと

本に記述してある通りに記述してみたのですが、どうも上手くいきません。
★の位置に

//MyClassクラスの定義 class MyClass { let msg = "ハロー" func hello(){ print(msg) } }

を記述してみるとエラーは解除されるのですが、今回は「別のファイルに定義してあるクラスを利用する」を行いたいと考えています。
スペルミスもあるのかなと思い、エラーの単語MyClassをコピペしてみたものの、そうではないようです。
もしかしたらバージョンの違いで記述方法が異なるのかなとも思いました。

追記
ViewController.swift

swift

1//ViewControllerクラスの定義 2class ViewController: UIViewController { 3 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view. 8 9 10 11 //103、MyClassのインスタンスmyObjを作る 12 let myObj = MyClass() 13 myObj.hello() 14 15 16 }

MyClass.swift

swift

1import Foundation 2 3class MyClass { 4 let msg = "ハロー" 5 func hello() { 6 print(msg) 7 } 8}

補足情報(FW/ツールのバージョンなど)

マシンの環境
macOS Catalina Version 10.15.3
Xcode Version 11.4
Swift version 5.1.3

書籍のバージョン
Xcode Version 10
Swift version 4.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/19 07:54

プロジェクトを作り直してみたらどうでしょうか?
wesker.alice

2020/05/19 08:06 編集

プロジェクトを作り直したらエラー発生せずにいけました。 作り直したプロジェクトの記述をコピーして元々のプロジェクトに貼り付けたんですが、エラーが出てしまいます。 原因としては何が考えられるのでしょうか?
退会済みユーザー

退会済みユーザー

2020/05/19 08:20 編集

もともとのプロジェクトのファイルリファレンス?とかがおかしくなってるんじゃないのかな? 新しく作り直したほうが大丈夫なら気にしなくていいんじゃないの?
wesker.alice

2020/05/19 08:35

新しいプロジェクトにお引越しをして問題なかったので、新たにそちらでやっていこうと思います。
guest

回答3

0

開発環境は微妙に違うものの、正常に動作しました。
なので、TsukubaDepot様との回答と併せて、以下もご確認頂ければと思います。

1、ファイル名が本当に正しいかどうか
2、MyClass.swiftファイルが、"Target Membership"に含まれているか(チェックが入っているか)

Xcode

※開発環境
Xcode11.2.1
Swift5

投稿2020/05/19 06:39

tsuki01

総合スコア1751

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tsuki01

2020/05/19 06:39

すみません、回答直後に解決したようなのでスルーしてください。。
wesker.alice

2020/05/19 06:46 編集

ご回答ありがとうございます! ファイル名に関しては該当箇所にコピペしたので異なることはありませんでした。 たまに打ち込みで記述すると1文字違いなどのスペルミスがあったりするので気をつけたいと思います。 2に関してはチェックが入っていました。 今回はCmd + Bによるビルドができていなかったようです。 様々な可能性を考慮に入れたいと考えているので、どんな些細な情報でも教えていただきありがとうございます! 私自身、初学者なので、まだまだ見えていない部分が多いので非常に助かります。
tsuki01

2020/05/19 06:46

直接解決に繋がる回答が出来ずに失礼いたしました。 解決した方法について、コメントありがとうございました。
wesker.alice

2020/05/19 06:57

すみません、解決したと思っていたのですが、「試したこと」の★を残したまま、でCmd + Bしていたので、エラーが消えていただけでした。 /* */で★の記述部分を隠した上で再度Cmd + Bしてみたところ、エラーが一瞬消えますが、すぐにエラーが復活しました。 エラーは相変わらず「Use of unresolved identifier 'MyClass'」のままでした。
guest

0

作成したファイルが保存されていない場合、うまく認識されないことがあります。

下記の画像のように、作成(更新した)ファイルのアイコンが灰色の場合は未保存なので、他のファイルからクラス名などがうまく参照できないことがあります。

イメージ説明

該当するファイル名をクリックして、Cmd + S (あるいは、メニューから Save を選択)すると、認識されるようになるともいます。

[追記]
もしそれでも解決しない場合には、 一回ビルド(Cmd + B など)を行うとエラーメッセージが消えますので、併せてご利用ください。

投稿2020/05/19 06:29

編集2020/05/19 06:43
TsukubaDepot

総合スコア5086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wesker.alice

2020/05/19 06:38

ご回答ありがとうございます! Cmd + Sは行っており未保存は避けていたのですが、それでも解決しないので、どうしたものかと頭を悩ませていました。 Cmd + Bのビルドに関しては初めて知りました! エラーも解決されました! ビルド方法を教えていただき、ありがとうございます!
wesker.alice

2020/05/19 06:55

すみません、解決したと思っていたのですが、「試したこと」の★を残したまま、でCmd + Bしていたので、エラーが消えていただけでした。 /* */で★の記述部分を隠した上で再度Cmd + Bしてみたところ、エラーが一瞬消えますが、すぐにエラーが復活しました。 エラーは相変わらず「Use of unresolved identifier 'MyClass'」のままでした。
guest

0

自己解決

みなさん、ご回答ありがとうございます。
ファイルリファレンスがおかしくなっているのか分からずなのですが、新たにプロジェクトを作成し、同じコードの記述でエラーが出なかったので、そちらでやっていこうと思います。
また知識を増やしてから原因を探って行こうと思います。

投稿2020/05/19 08:37

wesker.alice

総合スコア45

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問