2017-04-22 3 views
1

Xcode 8.2.1でswift 2.3プロジェクトを持っています) 自動swift 3を2.3から変換するときにエラーが発生しました。 '' CGFloat '型の引数リストで初期化子を呼び出せません'((UIContentContainer、C ~~

。2.3からの迅速な3を変換するしかし、私は二つの問題を得た。

1.Cannot invoke initializer for type 'CGFloat' with an argument list of type '((UIContentContainer, CGSize) -> CGSize)' 
2.Binary operator '+' cannot be applied to operands of type '(UIContentContainer, CGSize) -> CGSize' and 'CGFloat' 

     // GENERATE A GRID FOR BLOCKS ----------------------- 
    for i in 1...gridSize { 
     for j in 1...gridSize { 
      let _j = CGFloat(j-1) 
      let _a = (view.frame.width - CGFloat(gridSize)) 
      let _b = (CGFloat(size) + CGFloat(padding)) 
      let _ab = (_a * _b)/2 
      let _c = _j * (size + padding) 
      let _abc = _ab + _c 
      //let _x = (view.frame.width - CGFloat(gridSize) * (CGFloat(size) + CGFloat(padding)))/2 + _j * (size + padding) 
      let _x = _abc 
      let _y = CGFloat(rectsHeight) + CGFloat(i-1) * (size + padding) 
      let r = Rectangle(type: "default", x: _x, y: _y, size: size, color: midGray, view: gameView!,real_x : _x, real_y : _y) 

      rectanglesArray.append(r) 
     } 
    } 

これは、エラーメッセージの最終製品のコードである。 LETサイズとパディングがCGFloatある。

なぜできませんの計算する(CGFloat(size)+ CGFloat(padding))? Swift 2.3から作業していました。 スウィフト3では動作しません。

私をすべてサポートしてください。

ありがとうございました。

--04/2017分の22 11:54 Added-- お返事をありがとうございます。私は、詳細パディングを忘れ

申し訳ありません。

// Resize views accodingly to device screen size 
if UIScreen.main.bounds.size.width == 320 { 
    //iPhone 4/5 
    var size: CGFloat = 25 
    blocksHeight = 380 
    afterTouchSizeOffset = 23 

} else if UIScreen.main.bounds.size.width == 375 { 
    // iPhone 6 
    var size: CGFloat = 33 
    var padding: CGFloat = 3 
    blocksHeight = 520 
    afterTouchSizeOffset = 28 

} else if UIScreen.main.bounds.size.width == 414 { 
    // iPhone 6+ 
    var size: CGFloat = 36 
    var padding: CGFloat = 4 
    blocksHeight = 570 
    afterTouchSizeOffset = 33 

} else if UIScreen.main.bounds.size.width == 768 { 
    // iPad 
    var size: CGFloat = 55 
    var padding: CGFloat = 6 
    blocksHeight = 830 
    afterTouchSizeOffset = 50 
} 

すべてのパディング定義を確認しました。

enter image description here

Config.swift

/*** DO NOT EDIT THE VARIABLES BELOW ***/ 
var soundURL: URL? 
var soundID:SystemSoundID = 0 

var padding:CGFloat = 2 
var size:CGFloat = 28 
let gridSize = 10 
var gameView:UIView? 

var score = 0 
var bestScore = Int() 
var lastScore = Int() 
var playCount = Int() 
var gameEnded = false 

var bounds = CGRect() 

変更コード。 しかし、新しいエラー...

がプロパティに割り当てる3.Cannot 'size' は-----

Config.swift

解決----方法

// Resize views accodingly to device screen size 
if UIScreen.main.bounds.size.width == 320 { 
    //iPhone 4/5 
    size = 25 
    blocksHeight = 380 
    afterTouchSizeOffset = 23 

} else if UIScreen.main.bounds.size.width == 375 { 
    // iPhone 6 
    size = 33 
    padding = 3 
    blocksHeight = 520 
    afterTouchSizeOffset = 28 

} else if UIScreen.main.bounds.size.width == 414 { 
    // iPhone 6+ 
    size = 36 
    padding = 4 
    blocksHeight = 570 
    afterTouchSizeOffset = 33 

} else if UIScreen.main.bounds.size.width == 768 { 
    // iPad 
    size = 55 
    padding = 6 
    blocksHeight = 830 
    afterTouchSizeOffset = 50 
} 

です

Befor

/*** DO NOT EDIT THE VARIABLES BELOW ***/ 
var soundURL: URL? 
var soundID:SystemSoundID = 0 

var padding:CGFloat = 2 
var size:CGFloat = 28 

0123の後
/*** DO NOT EDIT THE VARIABLES BELOW ***/ 
var soundURL: URL? 
var soundID:SystemSoundID = 0 

GameBoard.swift

// Dimension variables 
var rectsHeight = 50 
var blocksHeight = 435 
var rectsForDissapear = Array<Dictionary<String,Any>>() 
var gridTilesAmount = Array<Int>() 
var blockEndCoords : CGPoint = CGPoint() 
var afterTouchSizeOffset : CGFloat = 25 
var selectedBlock : Block? 
var startTouchCoords : CGPoint = CGPoint() 
let DeviceTest:Bool = false 
let SimulatorTest:Bool = true 

var padding:CGFloat = 2 
var size:CGFloat = 28 

おかげで、すべてのサポーターの後

// Dimension variables 
var rectsHeight = 50 
var blocksHeight = 435 
var rectsForDissapear = Array<Dictionary<String,Any>>() 
var gridTilesAmount = Array<Int>() 
var blockEndCoords : CGPoint = CGPoint() 
var afterTouchSizeOffset : CGFloat = 25 
var selectedBlock : Block? 
var startTouchCoords : CGPoint = CGPoint() 
let DeviceTest:Bool = false 
let SimulatorTest:Bool = true 

Befor。

答えて

0

パディングの定義を表示するには、数字でなければなりませんが、コンパイラーはそれがクロージャーだと思うと思います。そうでなければ、すべての定義を見てみましょう。または、Xcodeで、ブレークポイントを使用して行で停止した後で、それぞれの上にカーソルを移動して、期待するタイプであることを確認します。そのうちの1つは...

編集1:これらの変数が正しく定義されている場所を示しています。しかし、スコープを考慮すると意味をなさないコードも表示されています。インサイドあなたの最初のあなたは、以下の持っているのステートメント「場合」:

var size: CGFloat = 25 

しかし、それがスコープ内にある間、あなたはそれを使って何を行うことはありません。スコープ内にある間は可変サイズを使用することは決してありません(25に定義されています)。

他にどこに定義しますか?

さらに下の行のパディングを見てください。 3回定義しますが、定義した後は決して使用しないでください。ここで割り当てる値は、それぞれが "}"に近づくと消えます。

コンパイラエラーが発生していない場合は、他の場所でもパディングを定義します。

+0

ご返信ありがとうございます。 詳細を追加しました。 パディング用の番号を設定しました。 なぜコンパイラはクロージャと考えていますか? 私は混乱しています.... – Yuki

+0

お返事ありがとうございます。 私たちはConfigs.swiftを持っています。 このファイルを定義します。 /***以下のバリエーションは編集しないでください***/ var soundURL:URL? のvar soundID:SystemSoundID = 0 のvarパディング:CGFloat = 2 VARサイズ:UIViewの:= 28 CGFloatは、グリッド寸法= 10 するvar gameViewを聞かせて? VARスコア= 0 VAR bestScore = INT() VAR lastScore = INT() するvarプレイカウント= INT() VAR gameEnded = falseを VAR境界= CGRect() – Yuki

+0

ありがとう! '//もしUIScreen.main.bounds.size.widthの== 320は{ // iPhone 5/5 サイズ= 25 blocksHeight = 380 afterTouchSizeOffset = 23 }デバイスの画面サイズ にaccodinglyビューのサイズを変更します。 ..... – Yuki

関連する問題