“#selector”的参数不引用中的初始化程序或方法
Argument of '#selector' does not refer to an initializer or method in
我将我的项目从 Swift2.2
更新为 Swift3.0
但是 "Argument of '#selector' does not refer to an initializer or method"
收到了问题。
代码如下 :
for object in Students {
let sectionNumber = collation.section(for: object.firstName!, collationStringSelector: #selector(NSObjectProtocol.self))
sections[sections.count - 1 - sectionNumber].append(object)
}
根据文档
func section(for object: Any, collationStringSelector selector: selector) -> Int
Description
Returns an integer identifying the section in which a model object belongs.
The table-view controller should iterate through all model objects for the table view and call this method for each object. If the application provides a Localizable.strings file for the current language preference, the indexed-collation object localizes each string returned by the method identified by selector. It uses this localized name when collating titles. The controller should use the returned integer to identify a local “section” array in which it should insert object.
Parameters
object
A model object of the application that is part of the data model for the table view.
*selector*
A selector that identifies a method returning an identifying string for object that is used in collation. The method should take no arguments and return an NSString object. For example, this could be a name property on the object.
Returns
An integer that identifies the section in which the model object belongs. The numbers returned indicate a sequential ordering.
解决方案
改变如下
collation.section(for: "test", collationStringSelector: #selector(getStr)) //here getStr is an other function returning String
func getStr()->String{
return "test"; // this should return an identifying string for object that is used in your collation
}
class Person: NSObject {
@objc var name: String
init(name: String) {
self.name = name
}
}
let p = Person(name: "Alice")
let collation = UILocalizedIndexedCollation.current()
collation.section(for: p, collationStringSelector: #selector(getter: Person.name))
这也很好,因为 Selector
来自 Objective-C。我们需要 :NSObject
和 @objc
.
我实施了 user2215977 答案,但应用程序一次又一次崩溃。现在我只需将#selector(NSObjectProtocol.self) 更改为"self"。所有错误都消失了,但只收到一个警告“不推荐使用 Objective-C 选择器的字符串文字;改用#selector”。
如果有人有解决此警告的想法,请立即分享 me.Otherwise 错误。
我将我的项目从 Swift2.2
更新为 Swift3.0
但是 "Argument of '#selector' does not refer to an initializer or method"
收到了问题。
代码如下 :
for object in Students {
let sectionNumber = collation.section(for: object.firstName!, collationStringSelector: #selector(NSObjectProtocol.self))
sections[sections.count - 1 - sectionNumber].append(object)
}
根据文档
func section(for object: Any, collationStringSelector selector: selector) -> Int
Description
Returns an integer identifying the section in which a model object belongs.
The table-view controller should iterate through all model objects for the table view and call this method for each object. If the application provides a Localizable.strings file for the current language preference, the indexed-collation object localizes each string returned by the method identified by selector. It uses this localized name when collating titles. The controller should use the returned integer to identify a local “section” array in which it should insert object.
Parameters
object
A model object of the application that is part of the data model for the table view.
*selector*
A selector that identifies a method returning an identifying string for object that is used in collation. The method should take no arguments and return an NSString object. For example, this could be a name property on the object.
Returns
An integer that identifies the section in which the model object belongs. The numbers returned indicate a sequential ordering.
解决方案
改变如下
collation.section(for: "test", collationStringSelector: #selector(getStr)) //here getStr is an other function returning String
func getStr()->String{
return "test"; // this should return an identifying string for object that is used in your collation
}
class Person: NSObject {
@objc var name: String
init(name: String) {
self.name = name
}
}
let p = Person(name: "Alice")
let collation = UILocalizedIndexedCollation.current()
collation.section(for: p, collationStringSelector: #selector(getter: Person.name))
这也很好,因为 Selector
来自 Objective-C。我们需要 :NSObject
和 @objc
.
我实施了 user2215977 答案,但应用程序一次又一次崩溃。现在我只需将#selector(NSObjectProtocol.self) 更改为"self"。所有错误都消失了,但只收到一个警告“不推荐使用 Objective-C 选择器的字符串文字;改用#selector”。
如果有人有解决此警告的想法,请立即分享 me.Otherwise 错误。