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

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

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

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

Q&A

解決済

2回答

532閲覧

extension UIView {}のエラー

gtime

総合スコア51

Swift

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

0グッド

0クリップ

投稿2017/07/20 16:56

このライブラリをプロジェクトに追加しました
https://github.com/KyoheiG3/NavigationNotice

swift

1file.swift 2 3import UIKit 4extension UIView { 5 func contentView(text: String) -> UIView { 6 let view = UIView(frame: CGRect(x: 0, y: 0, width: 375, height: 64)) 7 view.autoresizingMask = [.flexibleWidth, .flexibleHeight] 8 9 let label = UILabel(frame: view.bounds) 10 label.frame.origin.x = 10 11 label.frame.origin.y = 10 12 label.frame.size.width -= label.frame.origin.x 13 label.frame.size.height -= label.frame.origin.y 14 15 label.autoresizingMask = [.flexibleWidth, .flexibleHeight] 16 label.text = text 17 label.numberOfLines = 2 18 label.textColor = UIColor.white 19 view.addSubview(label) 20 21 return view 22 } 23}

swift

1ViewController.swift 2 3import UIKit 4import NavigationNotice 5class ViewController: UIViewController { 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 UIView.contentView("test") 10 11 } 12}

このコードだとエラーが発生します。
イメージ説明
同じファイルにまとめて書くとうまくいくのですが。。。

swift

1ViewController.swift 2 3import UIKit 4import NavigationNotice 5class ViewController: UIViewController { 6 func contentView(_ text: String) -> UIView { 7 let view = UIView(frame: CGRect(x: 0, y: 0, width: 375, height: 64)) 8 view.autoresizingMask = [.flexibleWidth, .flexibleHeight] 9 10 let label = UILabel(frame: view.bounds) 11 label.frame.origin.x = 10 12 label.frame.origin.y = 10 13 label.frame.size.width -= label.frame.origin.x 14 label.frame.size.height -= label.frame.origin.y 15 16 label.autoresizingMask = [.flexibleWidth, .flexibleHeight] 17 label.text = text 18 label.numberOfLines = 2 19 label.textColor = UIColor.white 20 view.addSubview(label) 21 22 return view 23 } 24 25 override func viewDidLoad() { 26 super.viewDidLoad() 27 28 let content = self.contentView("test") 29 content.frame.size.height = 64 30 content.backgroundColor = UIColor.blue 31 NavigationNotice.onStatusBar(false).addContent(content).showOn(self.view).hide(5) 32 } 33}

func contentView(_ text: String) -> UIView {...} の部分は他のViewControllerでも頻繁に使うので、extensionとして実装したいです。
どのようにすればextensionとして実装できるのでしょうか

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

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

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

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

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

guest

回答2

0

ベストアンサー

Instance Method として定義しているのに Type Method としてアクセスしているのが原因の一つです。

The Swift Programming Language - Method

また上記を解消しても、省略可能な引数のラベルとしていないのに省略している点も潜在的なエラーとして存在しています。

The Swift Programming Language - Function Omitting Argument Labels の項を参照

投稿2017/07/20 18:00

ykws

総合スコア1236

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

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

0

swift

1// func contentView(text: String) -> UIView { 2 static func contentView(text: String) -> UIView {

追記

イメージ説明
エラーメッセージは、Issue Navigatorからコピーできるので、まずはそれを使って検索してみましょう。

/Users/xxxxxxxx/Documents/ViewExt/ViewExt/ViewController.swift:16:16: Instance member 'contentView' cannot be used on type 'UIView'; did you mean to use a value of this type instead?

以下のようなページが見つかります。
Swiftのコンパイルエラー寄せ集め
そのものズバリなケースはありませんが、インスタンスクラスメソッドがキーワードになっているようです。
検索一ページ目に出てくるstackoverflowの質問回答とご自分のコードを見比べてみると、足りないものが見えてきませんか。解説は、公式サイトへリンクを貼ってくださっているので、私の方では割愛w

投稿2017/07/20 17:48

編集2017/07/20 20:28
izkn

総合スコア1698

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問