'da kullanıldığında çağrılmadı. Swift/Objective-C birlikte çalışabilirliği ile ilgili garip bir sorunla karşılaştım. Durum:Swift sınıfında bildirilen "/" operatör yükü bazen Objective-C
Swift'de yazılmış bir @objc public class GKDistance:NSObject,NSCoding,Comparable
sahibiyim.
public func <(a:GKDistance, b:GKDistance) -> Bool {
return a.value < b.value
}
public func ==(a:GKDistance, b:GKDistance) -> Bool {
return a.value == b.value
}
Daha sonra şöyle bir Objective-C yönteminde kullanılan:
if (distance < averageDistance){
// code
}
Objective-C yöntemi olduğunda aşağıdaki gibi mesafeleri karşılaştırmak için, ben <
için bir operatör aşırı eklemiş kullanıcı aşırı yüklendiğinde onaylamak için print()
deyim ve kesme noktası <
yönteminde ekleyebilirsiniz. Bir durumda, , Swift'da tanımlanan operatör aşırı yükünü gizemli bir şekilde atlar ve iki GKDistance nesnesi arasındaki düzenli Objective-C karşılaştırıcısını kullanır. distance.value == 2375.1842554877021
ve averageDistance.value == 75.671794891357421
, distance < averageDistance
getiri true
ile çalıştırdığınızda
, Swift operatör aşırı çarptı ve Objective-C koşullu içinde kod çalıştırır asla.
Söz konusu Objective-C yöntemini Swift'e dönüştürürsem, beklendiği gibi davranır, ancak Swift'i göremeyen uygulamalarımızda çeşitli Objective-C yöntemlerinde diğer GKDistance karşılaştırmaları olduğundan endişe duyuyorum. operatör aşırı yükü.
Operatör aşırı yüklenme ile ilgili olduğu gibi, Swift/Objective-C birlikte çalışabilirliği ile benzer sorunları olan var mı?
Sana soru cevap var sanmıyorum karşılaştırmak gerekir. Amacı (C) 'yi Objective-C'ye aşırı yükleyemediğinizi anladığım halde, soru şu ki ... Swift'de bir operatöre aşırı yüklediğinizde, o zaman ObjC'den Swift köprüsüne bu işlevi çağırabilir. Objektif C'yi kullanabilir (çok yasal) Swift'de operatör aşırı yükü. Ayrıca, pozisyonunuzu haklı gösteren herhangi bir belgeye işaret edebilir misiniz? –
@ColinPhillips: 'if (mesafe
@ColinPhillips: Bazı referanslar ekledim. –