2016-10-13 41 views
2

私はswift 3のマクロに問題があります。私は迅速なプロジェクトでヘッダーファイルを使用しようとしました。私はこれに続いたlink。 Bridging-Header.hファイルが生成され、別のヘッダーファイルをインポートできます。しかし、迅速なファイルでは、私は関数だけでなく、マクロ定数を呼び出します。例えば、ヘッダファイルSwift 3はマクロ機能を認識できません

#ifndef testHeader_h 
#define testHeader_h 

#if DEBUG 
#define TEST_VALUE 111 
#define TEST_STRING "Test string" 
#endif 

#if DEBUG 
#define DLOG(fmt,...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA__ARGS__) 
#else 
#define DLOG(...) 
#endif 

#endif /* testHeader_h */ 

.swiftファイル、

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var txtDisplay: UITextView! 
    @IBOutlet weak var btnPush: UIButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    @IBAction func setTextView(_ sender: UIButton) { 
//  LogTrace("IN") 
     DLOG(); 
     txtDisplay.text = TEST_STRING 

    } 
} 

ご覧のとおり、UIは、ボタンのみとのTextViewを持っています。ボタンを押すと、コンソールにログが書き込まれ、テキストがテキストビューに表示されます。私は、コンパイル時にしかし、それはエラーに

ViewController.swift:29:9: Use of unresolved identifier 'DLOG' 

を取得し、私は迅速なファイルの行DLOGを削除したとき、それが動作する、ことを理解していないと私はマクロTEST_STRINGを得ることができます。マクロ機能DLOGを認識しないのはなぜですか?ドキュメントから

答えて

3

複雑なマクロ

複雑なマクロはCとObjective-Cで使用されるが、スウィフトに何の対応 を持っていません。複雑なマクロは、定数を定義しないマクロで、かっこや関数に似たマクロを含む です。タイプチェックの制約を避けるため、または大量の定型コードを再入力することを避けるために、CおよびObjective-Cでは複雑なマクロ を使用します。ただし、マクロを使用すると、デバッグやリファクタリングが難しくなることがあります。 Swiftでは、関数 とジェネリックスを使用して、妥協することなく同じ結果を得ることができます。 したがって、CおよびObjective-Cソースの ファイルにある複雑なマクロはSwiftコードで使用できません。スウィフト移行ガイドへ

とObjective-C示唆:

グローバル定数などの簡単なマクロを宣言し、関数に複雑なマクロを変換します。

+0

ああ、多くの感謝!わかった。ですから、複雑なマクロを迅速に転送するだけです。 – GAVD

関連する問題