2017-12-27 3 views
-3

인식 할 수없는 선택자를 인스턴스 이름에 지정합니다.Unrecongnized 선택기 이름

섹션에서 partion 배열을 만들고 싶습니다. 나는 신속한 2에서 이것을하려고 노력하고있다. 그러나 나는 그것을 작동시킬 수 없다.

 var currentCollation : UILocalizedIndexedCollation! 
     var sections: [Section] { 
      let selector: Selector = "name" 

      let users: [User] = array.map { name in 
       let a = name["fullName"] as? String 
       let b = name["email"] as! String 
       let c = name["mobile"] as! String 
       let d = name["img"] as! String 
       let user = User(name: a!) 
       user.email = b 
       user.mobile = c 
       user.img = d 


       user.section = UILocalizedIndexedCollation.current().section(for: user, collationStringSelector:"name") 
       return user 
      } 

      var sections = [Section]() 
      for _ in 0..<currentCollation.sectionIndexTitles.count { 
       sections.append(Section()) 
      } 
      for user in users { 
       sections[user.section!].addUser(user: user) 

      } 


      print(sections) 
      for section in sections { 

       print(section.users) 
       var user = section.users as? User 
       print(user?.name) 
      section.users = self.currentCollation.sortedArray(from: section.users, collationStringSelector: "name") as! [User] 
      } 
      return sections 

     } 

@objc class User: NSObject { 
    let name: String 
    var section: Int? 
    var img: String? 
    var email: String? 
    var mobile : String? 

    init(name: String) { 
     self.name = name 
    } 

} 
class Section { 
    var users: [User] = [] 
    func addUser(user: User) { 
     self.users.append(user) 
    } 
} 
+0

'name'이라는 메소드가 있습니까? ?? –

+0

오류에 대한 질문을 게시 할 때 항상 완전하고 정확한 오류 메시지를 포함하고 오류가 발생한 행을 지적하십시오. – rmaddy

답변

0

스위프트에서 선택기에 문자열을 사용하지 마십시오. #selector 구조 사용하지만

let selector: Selector = #selector(name) 

만 작동합니다 현재의 클래스는 NSObject를하고 매개 변수가없는 오브젝티브 C 기능 "이름"이있는 경우 : 사실 (

class Foo: NSObject { 
    @objc func name() { 
     print("In \(#function)") 
    } 
} 

을, 당신은 APPE하지 않음)

당신 NSObject를 상속하지 않는 개체에 대한 선택기를 만들 수 있지만 이러한 선택에 perform() 같은 기능을 사용할 수 있으므로 매우 유용하지 않다 ar 클래스의 이름이 "@objc"인지 여부를 나타내는 함수가 있어야합니다.

+1

현지화 된 데이터 정렬로 작동합니까 –

+0

OP는 선택기 이름을 문자열로 사용하는 apple 메소드를 사용합니다! .. # Selector를 objc NSString으로 변환 할 수 있습니까? 아마도 NSStringFromSelector (#selector (name))를 사용할 수 있습니다. –

+0

예, OP가 선택기 이름을 'String'으로 사용하는 메소드를 사용하고 있습니다. 새로운'# selector' 구조체는 컴파일러가 selector의 컴파일 타임 유효성 검사를 할 수 있기 때문에 강력합니다. –