2016-04-22 4 views
0

だから私は、現在の目的であるオープンソースプロジェクトを迅速に書き直しています。私は、この複雑なプロジェクトに取り組むための最善の方法は、各クラスを一度に書き直して統合することだと考えました。だから私は最初のクラスを書き直して、すべての目的のクラスを即時クラスに向けることができ、コンパイルエラーはありません。目的のCプロジェクトで迅速なクラスで問題をデバッグするテクニックはありますか?

プログラムを実行すると失敗します。私はオブジェクトが作成されていないためだと思う。 swiftclass-swift.hファイルが作成されましたが、自動的に作成されないメソッドを手動で追加する必要がありました。問題が何であるかをデバッグする最良の方法は何かに関する技術や記事はありますか?新しいクラスの呼び出しごとにブレークポイントを作成するか、問題を特定するためのワークフローがありますか?

私はクラスが初期化されているブレークポイントを作成しましたが、何も明白ではありません。さらに、クラスに対して単体テストを作成しようとしましたが、xcodeがテストを実行する前にプログラムをコンパイルしようとするため、これらは実行されません。また、クラスは遊び場でうまく動作することに注意してください。読むための助けや情報があれば幸いです。ここで

クラスです:

class DateRange: NSObject, NSCopying { 

private var dateFormatter = NSDateFormatter() 

var start: NSDate 
var end: NSDate 
var isEmpty: Bool { 
    get {return self.start.self.isEqualToDate(self.end)} 
} 

init(start: NSDate?, end: NSDate?) { 
    self.start = start! 
    self.end = end! 
    super.init() 
} 

class func dateRange<DR: DateRange>(start: NSDate?, end: NSDate?) -> DR { 
    let dateR = DateRange(start: start, end: end) as! DR 

    return dateR 
} 

func components(unitFlags: NSCalendarUnit, forCalendar calendar: NSCalendar) -> NSDateComponents? { 
    self.checkIfValid() 

    return calendar.components(unitFlags, fromDate: self.start, toDate: self.end, options: NSCalendarOptions.WrapComponents) 
} 

func checkIfValid() { 
    assert(self.start.compare(self.end) != .OrderedDescending) 
} 

func containsDate(date: NSDate) -> Bool { 
    self.checkIfValid() 

    return date.compare(self.start) != .OrderedDescending || self.end.compare(self.start) != .OrderedDescending 
} 

func intersectDateRange(range: DateRange?) { 
    self.checkIfValid() 

    if (range!.end.compare(self.start) != .OrderedDescending || self.end.compare(range!.start) != .OrderedDescending) { 
     self.end = self.start 
     return 
    } 

    if self.start.compare(range!.start) == .OrderedAscending { 
     self.start = range!.start 
    } 
    if range!.end.compare(self.end) == .OrderedAscending { 
     self.end = range!.end 
    } 
} 

func intersectsDateRange(range: DateRange?) -> Bool { 
    if range!.end.compare(self.start) != .OrderedDescending || self.end.compare(range!.start) != .OrderedDescending { 
     return false 
    } 
    return true 
} 

func includesDateRange(range: DateRange?) -> Bool { 
    if range!.start.compare(self.start) == .OrderedAscending || self.end.compare(range!.end) == .OrderedAscending { return false 
    } 
    return true 
} 

func unionDateRange(range: DateRange?) { 
    self.checkIfValid() 
    range!.checkIfValid() 

    self.start = self.start.earlierDate((range?.start)!) 
    self.end = self.end.laterDate((range?.end)!) 
} 

func enumerateDaysWithCalendar(calendar: NSCalendar?, usingBlock: (day: NSDate?, stop: Bool?) ->()) -> Void { 

    let comp: NSDateComponents = NSDateComponents() 
    comp.day = 1 

    var date: NSDate = self.start 
    let stop: Bool = false 

    while !stop && date.compare(self.end) == .OrderedAscending { 
     usingBlock(day: date, stop: stop) 
     date = (calendar?.dateByAddingComponents(comp, toDate: self.start, options: NSCalendarOptions.WrapComponents))! 
     comp.day += 1 
    } 
} 

func isEqualToDate(range: DateRange?) -> Bool { 
    return range == range!.start.isEqualToDate(self.start) && range!.end.isEqualToDate(self.end) 
} 

// MARK: - NSObject 

func copyWithZone(zone: NSZone) -> AnyObject { 
    return DateRange(start: self.start, end: self.end) 
} 

override func isEqual(object: AnyObject?) -> Bool { 
    var isObject = Bool() 
    if self.isEqual(object) { 
     isObject = true 
    } 

    if ((object?.isKindOfClass(DateRange)) != nil) { 
     isObject = false 
    } 
    return isObject 
} 
} 
+0

あなたはそれを言及しなかったので、私は頼んだと思った、あなたのブリッジヘッダーの設定は適切ですか?あなたがそれを実行したときに「失敗する」と言うと、プログラム全体が失敗したり、新しいクラスが呼び出されたりするだけですか? – fsb

+0

ヘッダーが作成されました。作成されなかったメソッドを追加する必要がありました。私は質問を更新しました。 – Chris

+0

失敗を説明できますか? –

答えて

0

ヘッダーはあなたが迅速なコードをコンパイルするたびに生成されていること。これは手動で編集するためのものではありません。あなたが行った編集は、次にコンパイルするときに吹き飛ばされます。

これが意味するのは何かその宣言については、目的のcと互換性がありません。たぶんいくつかの迅速な機能(タプルなど)を使用しているか、プライベートとマークされているためヘッダーにエクスポートされないことがあります。実際に宣言を見ることなく言うことはできません。

ヘッダーに表示されるまで宣言を変更し、目的のCコードが表示されたときに呼び出すことができるようにすることから始めます。

関連する問題