'AnyHashable'不能转换为'NSObject'

时间:2018-03-29 13:55:17

标签: swift xcode

我正在将我的Objective-C代码转换为Swift。 我有自己的DataStructure类,名为“DCclass”,继承自“NSObject”... 我做了所有必需的事情,如:在Bridging-header导入“DCclass.h”等等事情很好但是在for循环中我面临的错误就像它的类型转换问题。 在此先感谢。

当前Objective-C代码:

#import “DCclass.h”
@interface LPFPickerCell ()
@property (nonatomic) NSMutableArray *myMutableArray;
@end

@implementation LPFPickerCell
- (void)setSelectedData:(NSString *) selectedString
{    
    int i = 0;
    for (DCclass *dc in self.myMutableArray)    /// Swift is showing compile time error here
    {
        NSLog(@"DCclass.empName = %@",dc.empName);
    }
}
@end

转换后的Swift代码:

class LPFPickerCell {

    var myMutableArray = [AnyHashable]()

    func setSelectedData(_ selectedString: String?) {
        let i: Int = 0
        for dc: DCclass in myMutableArray {    ///‘AnyHashable’ is not convertible to ‘DCclass’
        print("DCclass.empName = \(dc.empName)")
        }
    }
}

2 个答案:

答案 0 :(得分:3)

也许您需要更改阵列类型

var myMutableArray = [AnyHashable]()

var myMutableArray = [DCclass]()

然后在for循环中你可以像这样访问它

for dc in myMutableArray {    
    print("DCclass.empName = \(dc.empName)")
}

答案 1 :(得分:1)

  

AnyHashable类型将相等比较和散列操作转发给基础可散列值,隐藏其特定的基础类型。

     

您可以通过在AnyHashable实例中包装混合类型键,在字典和其他需要Hashable一致性的集合中存储混合类型键:

问题是使用AnyHashable不适用于DCclass类型,因此您需要手动将myMutableArray转换为特定类型:

var myMutableArray = [DCclass]()

转换代码就像:

class LPFPickerCell {
    var myMutableArray = [DCclass]()

    func setSelectedData(_ selectedString: String?) {
        let i: Int = 0
        for dc: DCclass in myMutableArray {  
            print("DCclass.empName = \(dc.empName)")
        }
    }
}