How to compare “Any” value types

前端 未结 6 534
我在风中等你
我在风中等你 2020-12-15 05:03

I have several \"Any\" value types that I want to compare.

var any1: Any = 1
var any2: Any = 1

var any3: Any = \"test\"
var any4: Any = \"test\"

print(any1         


        
6条回答
  •  刺人心
    刺人心 (楼主)
    2020-12-15 05:32

    Aaron Rasmussen's answer can also be used as an extension, like so:

    public extension Equatable {
      /// Equate two values of unknown type.
      static func equate(_ any0: Any, _ any1: Any) -> Bool {
        guard
          let equatable0 = any0 as? Self,
          let equatable1 = any1 as? Self
        else { return false }
    
        return equatable0 == equatable1
      }
    }
    
    final class EquatableTestCase: XCTestCase {
      func test_equate() {
        let int: Any = Int.random( in: .min...(.max) )
        let bool: Any = Bool.random()
    
        XCTAssertTrue( Int.equate(int, int) )
        XCTAssertTrue( .equate(bool, bool) )
        XCTAssertFalse( .equate(int, int) )
    
        XCTAssertTrue( AnyHashable.equate(bool, bool) )
        XCTAssertFalse( AnyHashable.equate(bool, int) )
      }
    }
    

提交回复
热议问题