2017-02-09 34 views
2

我从这个question有一个字符串扩展,看起来非常简单,只有我得到一个额外的参数错误。 可变给出额外参数错误的字符串扩展

var modelDict: [Int: [String: String]] = [:] 

扩展:

import Foundation 


extension String { 
    func contains(_ string: String, options: String.CompareOptions) -> Bool { 
     return range(of: string, options: options) != nil 
    } 
} 

用法:

let filteredDict = self.sharedDataVal.modelDict.contains(manufacturerCodeVar, options: .caseInsensitive) 

print("Filtered Array \(filteredDict)") 

任何想法,为什么.caseInsensitive被标记为一个额外的ARG?

编辑基于罗布的建议,但我不认为我还没有得到它。

变量缺省值:

class sharedData { 

    static let sharedInstance = sharedData() 
    struct model{ 
     var id: String 
     var modelName: String 
     var modelNumber: String 
     var manuShort: String 
     var phiTypeCode: String 
     var phiTypeDescription: String 
    } 

    var modelDictTest:   [Int: [model]] = [:] 
} 

装入词典:

let modelID    = recordInfo["id"] as? String 
    let modelName   = recordInfo["modelname"] as? String 
    let modelNumber   = recordInfo["modelnumber"]as? String 
    let modelManuShort  = recordInfo["manu_short"]as? String 
    let modelPhiTypeCode  = recordInfo["phitypecode"]as? String 
    let modelPhiDescription = recordInfo["phitypedescription"]as? String 

    let localModelDict = sharedData.model(id: modelID!, modelName: modelName!, modelNumber: modelNumber!, manuShort: modelManuShort!, phiTypeCode: modelPhiTypeCode!, phiTypeDescription: modelPhiDescription!) 

用法:

let filteredDict = self.sharedDataVal.modelDictTest.contains(manufacturerCodeVar, options: .caseInsensitive) 

仍然得到同样的错误,但我相信我不是正在加载结构int modelDictTest正确

+0

'modelDict'是什么类型? –

+0

我猜'modelDict'是一个数组,因此你不能调用你的'contains'方法,而是只有一个参数的数组。 –

+0

除非你的'modelDict'不是String,否则你不能使用'contains'方法。 – ridvankucuk

回答

3

modelDict是类型[Int: [String: String]]。您已在String上撰写了附加信息。这没有关系。

相反,您将从Sequence获得标准contains(_:),该参数没有options参数。

作为一般规则,如果你有一个像类型和[Int: [String: String]]你发现自己想创造这种类型的扩展名,你真的打算让model[Int: [String: String]]一个结构。然后你可以添加方法,并且不需要扩展。

+0

是有道理的。正如你所看到的,我对这个=是相当新的)。你会碰巧有一个例子,或者将我指向这种类型的Dictionary的结构的例子。 'modelDic'被定义为一个全局共享变量,并不在我尝试使用过滤器的类中。 – JLanders

+0

这可能帮助:https://www.youtube.com/watch?v=_S6UOrwS-Tg&feature=youtu.be最主要的一点就是只让你的模型自身的类型(结构或类)。然后添加你需要的方法。在内部它可能有一个字典像你当前的'modelDict',但是调用者不必关心这个。你可以创建一个包含'(_:选项:)'方法为您'Model'类型,如果它可以做任何它与它的内部字典需要。 –

+0

在我上面编辑的问题中做了一个尝试。不要以为我得到它。 = / – JLanders

相关问题