質問編集履歴

3 エラーメッセージの追加

mottyan23

mottyan23 score 13

2015/12/04 10:54  投稿

[swift2]extensionを使用してクラスを拡張したい
###前提・実現したいこと
用意したimageViewに表示した画像から、指定した座標の色情報を取り出したい.
その為にUIImageを拡張したい。
###発生している問題・エラーメッセージ
extensionでクラスを拡張する時にエラーが出る.
 
エラーメッセージ:Declaration is only valid at file scope  
###ソースコード
```swift
import UIKit
class ViewController: UIViewController{
   
   let pixelDataByteSize = 4
   
   extension UIImage {
       
       func getColor(pos: CGPoint) -> UIColor {
           
           let imageData = CGDataProviderCopyData(CGImageGetDataProvider(self.CGImage))
           let data : UnsafePointer = CFDataGetBytePtr(imageData)
           let scale = UIScreen.mainScreen().scale
           let address : Int = ((Int(self.size.width) * Int(pos.y * scale)) + Int(pos.x * scale)) * pixelDataByteSize
           let r = CGFloat(data[address])
           let g = CGFloat(data[address+1])
           let b = CGFloat(data[address+2])
           let a = CGFloat(data[address+3])
           
           return UIColor(red: r, green: g, blue: b, alpha: a)
       }
   }
   override func viewDidLoad() {
       super.viewDidLoad()
       
       // 画面の背景色をグレーにする
       self.view.backgroundColor = UIColor.lightGrayColor()
       
       // イメージビューを作る
       let rect = CGRect(x: 0, y: 0, width: 300, height: 200)
       let imageView = UIImageView(frame: rect)
       // イメージの表示モード
       imageView.contentMode = .ScaleAspectFit
       // イメージビューにイメージを設定する
       imageView.image = UIImage(named: "sheep.jpg")
       // イメージビューの座標をルートビューの中央に設定する
       imageView.center = self.view.center
       // イメージビューをルートビューに追加(表示)する
       self.view.addSubview(imageView)
   }
   override func didReceiveMemoryWarning() {
       super.didReceiveMemoryWarning()
       // Dispose of any resources that can be recreated.
   }
}
```
###補足情報(言語/FW/ツール等のバージョンなど)
XcodeもIOSのバージョンも最新(2015年12月現在)の物を使用しています。
まだプログラミングを始めたばかりで何もわかっていませんが、何かアプリを作りたいと思い、色判別を行ってみようと思いました。
まだプログラミングを始めたばかりで何もわかっていませんが、何かアプリを作りたいと思い、カメラを用いた色判別を行ってみようと思いました。
extensionを行う位置や、行う為に何をしたら良いのかを教えていただきたいです。
  • Swift 2

    1355 questions

    Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

2 ソースコードの修正

mottyan23

mottyan23 score 13

2015/12/04 07:51  投稿

[swift2]extensionを使用してクラスを拡張したい
###前提・実現したいこと
用意したimageViewに表示した画像から、指定した座標の色情報を取り出したい.
その為にUIImageを拡張したい。
###発生している問題・エラーメッセージ
extensionでクラスを拡張する時にエラーが出る.
###ソースコード
```swift
 
import UIKit
class ViewController: UIViewController{
   
   let pixelDataByteSize = 4
   
   extension UIImage {
       
       func getColor(pos: CGPoint) -> UIColor {
           
           let imageData = CGDataProviderCopyData(CGImageGetDataProvider(self.CGImage))
                 let data : UnsafePointer = CFDataGetBytePtr(imageData)                                                         let scale = UIScreen.mainScreen().scale
                                                                                 let address : Int = ((Int(self.size.width) * Int(pos.y * scale)) + Int(pos.x * scale)) * pixelDataByteSize
                                                                                                                                         let r = CGFloat(data[address])
                                                                                              let g = CGFloat(data[address+1])
                                                                                          let b = CGFloat(data[address+2])
                                                                                          let a = CGFloat(data[address+3])
           let data : UnsafePointer = CFDataGetBytePtr(imageData)
           let scale = UIScreen.mainScreen().scale
           let address : Int = ((Int(self.size.width) * Int(pos.y * scale)) + Int(pos.x * scale)) * pixelDataByteSize
           let r = CGFloat(data[address])
           let g = CGFloat(data[address+1])
           let b = CGFloat(data[address+2])
           let a = CGFloat(data[address+3])
           
                                                     return UIColor(red: r, green: g, blue: b, alpha: a)
                             }
                                                }
           return UIColor(red: r, green: g, blue: b, alpha: a)
       }
   }
   override func viewDidLoad() {
                                        super.viewDidLoad()
       super.viewDidLoad()
       
       // 画面の背景色をグレーにする  
       self.view.backgroundColor = UIColor.lightGrayColor()  
       
// 画面の背景色をグレーにする
                                           self.view.backgroundColor = UIColor.lightGrayColor()
       
       
// イメージビューを作る
                                               let rect = CGRect(x: 0, y: 0, width: 300, height: 200)
                         let imageView = UIImageView(frame: rect)
       
// イメージの表示モード
                                               imageView.contentMode = .ScaleAspectFit
       
// イメージビューにイメージを設定する
                                        imageView.image = UIImage(named: "sheep.jpg")
       
// イメージビューの座標をルートビューの中央に設定する
                                imageView.center = self.view.center
       
// イメージビューをルートビューに追加(表示)する
                                   self.view.addSubview(imageView)
       // イメージビューを作る
       let rect = CGRect(x: 0, y: 0, width: 300, height: 200)
       let imageView = UIImageView(frame: rect)
       // イメージの表示モード
       imageView.contentMode = .ScaleAspectFit
       // イメージビューにイメージを設定する
       imageView.image = UIImage(named: "sheep.jpg")
       // イメージビューの座標をルートビューの中央に設定する
       imageView.center = self.view.center
       // イメージビューをルートビューに追加(表示)する
       self.view.addSubview(imageView)
   }
   override func didReceiveMemoryWarning() {
                                  super.didReceiveMemoryWarning()
       
// Dispose of any resources that can be recreated.
   
       super.didReceiveMemoryWarning()
       // Dispose of any resources that can be recreated.
   }
 }
}
}
}```
```
###補足情報(言語/FW/ツール等のバージョンなど)
XcodeもIOSのバージョンも最新(2015年12月現在)の物を使用しています。
まだプログラミングを始めたばかりで何もわかっていませんが、何かアプリを作りたいと思い、色判別を行ってみようと思いました。
extensionを行う位置や、行う為に何をしたら良いのかを教えていただきたいです。
  • Swift 2

    1355 questions

    Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

1 コードのインデントを揃えました

mottyan23

mottyan23 score 13

2015/12/04 07:44  投稿

extensionを使用してクラスを拡張したい
[swift2]extensionを使用してクラスを拡張したい
###前提・実現したいこと
用意したimageViewに表示した画像から、指定した座標の色情報を取り出したい.
その為にUIImageを拡張したい。
###発生している問題・エラーメッセージ
extensionでクラスを拡張する時にエラーが出る.
###ソースコード
```swift
import UIKit
class ViewController: UIViewController{
   
   let pixelDataByteSize = 4
   
   extension UIImage {
       
       func getColor(pos: CGPoint) -> UIColor {
           
           let imageData = CGDataProviderCopyData(CGImageGetDataProvider(self.CGImage))
           let data : UnsafePointer = CFDataGetBytePtr(imageData)
           let scale = UIScreen.mainScreen().scale
           let address : Int = ((Int(self.size.width) * Int(pos.y * scale)) + Int(pos.x * scale)) * pixelDataByteSize
           let r = CGFloat(data[address])
           let g = CGFloat(data[address+1])
           let b = CGFloat(data[address+2])
           let a = CGFloat(data[address+3])
                 let data : UnsafePointer = CFDataGetBytePtr(imageData)                                                         let scale = UIScreen.mainScreen().scale
                                                                                 let address : Int = ((Int(self.size.width) * Int(pos.y * scale)) + Int(pos.x * scale)) * pixelDataByteSize
                                                                                                                                         let r = CGFloat(data[address])
                                                                                              let g = CGFloat(data[address+1])
                                                                                          let b = CGFloat(data[address+2])
                                                                                          let a = CGFloat(data[address+3])
           
           return UIColor(red: r, green: g, blue: b, alpha: a)
       }
   }
                                                     return UIColor(red: r, green: g, blue: b, alpha: a)
                             }
                                                }
   override func viewDidLoad() {
       super.viewDidLoad()
                                        super.viewDidLoad()
       
       // 画面の背景色をグレーにする  
       self.view.backgroundColor = UIColor.lightGrayColor()  
       
       // イメージビューを作る
       let rect = CGRect(x: 0, y: 0, width: 300, height: 200)
       let imageView = UIImageView(frame: rect)
       // イメージの表示モード
       imageView.contentMode = .ScaleAspectFit
       // イメージビューにイメージを設定する
       imageView.image = UIImage(named: "sheep.jpg")
       // イメージビューの座標をルートビューの中央に設定する
       imageView.center = self.view.center
       // イメージビューをルートビューに追加(表示)する
       self.view.addSubview(imageView)
// 画面の背景色をグレーにする
                                           self.view.backgroundColor = UIColor.lightGrayColor()
       
       
// イメージビューを作る
                                               let rect = CGRect(x: 0, y: 0, width: 300, height: 200)
                         let imageView = UIImageView(frame: rect)
       
// イメージの表示モード
                                               imageView.contentMode = .ScaleAspectFit
       
// イメージビューにイメージを設定する
                                        imageView.image = UIImage(named: "sheep.jpg")
       
// イメージビューの座標をルートビューの中央に設定する
                                imageView.center = self.view.center
       
// イメージビューをルートビューに追加(表示)する
                                   self.view.addSubview(imageView)
   }
   override func didReceiveMemoryWarning() {
       super.didReceiveMemoryWarning()
       // Dispose of any resources that can be recreated.
   }
                                  super.didReceiveMemoryWarning()
       
// Dispose of any resources that can be recreated.  
     
 
    }  
 
 
  }  
}
}```
###補足情報(言語/FW/ツール等のバージョンなど)
XcodeもIOSのバージョンも最新(2015年12月現在)の物を使用しています。
まだプログラミングを始めたばかりで何もわかっていませんが、何かアプリを作りたいと思い、色判別を行ってみようと思いました。
extensionを行う位置や、行う為に何をしたら良いのかを教えていただきたいです。
  • Swift 2

    1355 questions

    Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る