- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Sử dụng Swift 4, tôi đang cố gắng viết một giao thức tùy chỉnh cung cấp sự phù hợp với giao thức @objc.
Cụ thể hơn, tôi có một giao thức tùy chỉnh Có thể tìm kiếm
, cung cấp giao thức UIKit UISearchBarDelegate
Cách triển khai đơn giản chỉ yêu cầu triển khai lệnh gọi lại để xử lý các thay đổi của bộ lọc tìm kiếm.
Giao thức @objc Có thể tìm kiếm: class, UISearchBarDelegate {
@objc func searchFilterChanged(_: String?)
}
Tôi cung cấp việc triển khai đại biểu trong phần mở rộng giao thức:
tiện ích mở rộng Có thể tìm kiếm được {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchFilterChanged(searchText)
}
// .. và một số phương thức ủy nhiệm khác
}
Cuối cùng, trong một tiện ích mở rộng khác, tôi đã tạo và cài đặt thanh tìm kiếm (cài đặtSearchBar
Phải được lấy từ Bộ điều khiển xem cụ thể viewDidLoad
gọi):
tiện ích mở rộng Có thể tìm kiếm ở nơi Tự: UITableViewController {
chức năng cài đặtSearchBar() {
hãy để searchBar = UISearchBar()
searchBar.delegate = tự
tableView?.tableHeaderView = searchBar
}
}
Thật không may, khi người dùng nhập văn bản vào thanh tìm kiếm,UISearchBarDelegate
Phương thức ủy nhiệm sẽ không được gọi. Trình biên dịch đã cảnh báo tôi bằng thông báo này:
Phương thức không phải '@objc' 'searchBar(_:textDidChange:)' không đáp ứng yêu cầu tùy chọn của giao thức '@objc' 'UISearchBarDelegate'
Tuy nhiên, tôi không thể chuyển đổi @objc
vào phương thức vì điều này sẽ gây ra lỗi trình biên dịch sau:
@objc chỉ có thể được sử dụng với các thành viên của lớp, giao thức @objc và phần mở rộng cụ thể của lớp
Vì vậy, bây giờ câu hỏi của tôi là: liệu có thể đạt được hành vi mong muốn trong Swift hay không, hay không thể đạt được sự tuân thủ với giao thức @objc trong một giao thức khác?
Lưu ý 1: Tôi biết điều này có thể đạt được bằng cách sử dụng các lớp con; tôi vẫn đang tìm phiên bản POP.
Lưu ý 2: Tôi biết UISearchController
Cũng giúp đơn giản hóa việc thực hiện tìm kiếm; Tôi không thể sử dụng lớp này vì trong mã thực tế của tôi, tôi có chế độ xem bộ lọc phức tạp hơn và các điều khiển khác - đó là những gì tôi sử dụng trần trụi UISearchBar
的原因。
câu trả lời hay nhất
Điều này là do thời gian chạy Obj-C sử dụng công văn động (tra cứu/chuyển thông báo động) để tuân thủ đối tượng nhằm biết liệu nó có nhận ra phương thức được yêu cầu và gọi nó hay không.
Tiện ích mở rộng giao thức Swift sử dụng công văn tĩnh theo mặc định. Theo một nghĩa nào đó, khi UISearchBarDelegate chuyển một thông báo đến một lớp tuân thủ giao thức này, nó không thể tìm thấy phương thức mở rộng vì đây là phương thức tĩnh đối với giao thức. Do đó, việc triển khai của bạn sẽ không bị phát hiện bởi thời gian chạy cũng như chức năng.
Đây là một chủ đề sâu sắc. Tôi không muốn bạn phải rõ ràng với những đoạn văn đơn giản của tôi. Tuy nhiên, tôi đã thử điều này một cách vô ích khi các tiện ích mở rộng giao thức Swift còn mới (cố gắng khái quát hóa UITableViewDelegate và DataSource). Tôi đã phải nghiên cứu lý do và tôi có thể cho bạn biết từ kinh nghiệm và nghiên cứu của mình, nó liên quan đến nhắn tin Objc, dựa vào các tiện ích mở rộng giao thức để gửi động và gửi tĩnh.
Về ios - triển khai giao thức @objc khác trong Swift, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/47109329/
Thông tin cơ bản: Gần đây tôi đã làm việc với JPA và rất ấn tượng với sự dễ dàng mà tôi có thể tạo lớp lưu giữ lâu dài cho một dự án cơ sở dữ liệu quan hệ khá lớn. Công ty chúng tôi sử dụng nhiều cơ sở dữ liệu không phải SQL, đặc biệt là cơ sở dữ liệu hướng cột. Tôi có ý tưởng về việc có thể sử dụng JPA với các cơ sở dữ liệu này
Tôi đã thêm các cấu hình bản dựng này vào maven pom của mình vì tôi muốn kết hợp các phần phụ thuộc Apache Solr với Jar. Nếu không tôi nhận được SolarServerException: ClassNotF
giao diện ITurtle { void Fight(); void EatPizza() } giao diện ILeonardo : ITurtle {
Tôi hy vọng rằng một trong các công cụ ánh xạ đối tượng/quan hệ (ORM) có sẵn cho Java sẽ đáp ứng các yêu cầu sau: sử dụng JPA hoặc truy vấn SQL gốc để lấy số lượng lớn hàng và trả về chúng dưới dạng đối tượng thực thể. Cho phép lặp qua các hàng (thực thể) và thực hiện thao tác hiện tại
Có vẻ như là không, vì tôi có mã triển khai From for, tôi có thể chuyển đổi A thành B bằng .into(), nhưng điều tương tự không hoạt động với Vec .into() a Vec. Hoặc là tôi đã làm hỏng điều gì đó. ngăn cản việc triển khai nguồn gốc, Hoặc điều này không nên được đăng
Trong C#, nếu A triển khai IX và B kế thừa từ A, thì có nhất thiết phải tuân theo B triển khai IX không? Nếu vậy thì có phải do LSP không? Có sự khác biệt nào giữa: 1. Giao diện IX Loại A : IX;
Như hiện tại, câu hỏi này không phù hợp với định dạng Hỏi & Đáp của chúng tôi. Chúng tôi hy vọng câu trả lời sẽ được hỗ trợ bởi các sự kiện, trích dẫn hoặc chuyên môn, nhưng câu hỏi có thể gây ra tranh luận, tranh luận, bỏ phiếu hoặc thảo luận mở rộng. Nếu bạn cảm thấy vấn đề này có thể được cải thiện và có thể mở lại, hãy truy cập
Tôi đang đọc mã triển khai của (^) từ thư viện haskell tiêu chuẩn: (^) :: (Num a, Integral b) => a -> b -> a x0 ^ y0 | triển lãm x0
Tôi sẽ biểu diễn trò chơi cờ vua dưới dạng cấu trúc C++. Theo tôi, lựa chọn tốt nhất là cấu trúc cây (vì ở mỗi độ sâu, chúng ta có thể thực hiện một số bước di chuyển). Đây có phải là một cách tiếp cận tốt? cấu trúc TreeElement{SomeMoveType
Tôi đang triển khai thuật toán khớp chuỗi cho cơ sở dữ liệu tên người dùng. Cách tiếp cận của tôi lấy cơ sở dữ liệu tên người dùng hiện có và tên người dùng mới mà người dùng muốn, sau đó kiểm tra xem tên người dùng đó đã được sử dụng chưa. Nếu được lấy, phương thức sẽ trả về tên người dùng với một số không được lấy từ cơ sở dữ liệu. Ví dụ: “Gia
Tôi đang cố triển khai thuật toán tìm kiếm theo chiều rộng để tìm khoảng cách ngắn nhất giữa hai đỉnh. Tôi đã phát triển một đối tượng Hàng đợi để lưu và truy xuất các đối tượng và tôi có một mảng 2D để lưu hai đỉnh đã cho
Tôi hiện đang phát triển trò chơi Python của mình bằng ika, sử dụng python 2.5 và tôi quyết định sử dụng tính năng tìm đường A* cho AI. Tuy nhiên, tôi thấy nó quá chậm so với nhu cầu của mình (3-4 kẻ thù có thể sẽ tụt lại phía sau trò chơi, nhưng tôi muốn cung cấp 4-
Tôi đang tìm cách triển khai mã nguồn mở của Kademlia cho bảng băm phân tán trong C/C++. Nó phải nhẹ và đa nền tảng (win/linux/mac). Nó phải có khả năng xuất bản thông tin lên DHT và truy xuất nó. Câu trả lời hay nhất OpenDHT là
Tôi đọc được dòng này trong một cuốn sách: - "Khi chúng tôi yêu cầu triển khai C++ chạy một chương trình, nó sẽ thực hiện bằng cách gọi hàm này." Và tôi muốn biết "triển khai C++" nghĩa là gì hoặc cụ thể là gì. giúp đỡ!? Câu trả lời hay nhất "triển khai C++" đề cập đến trình biên dịch cộng với liên kết
Tôi đang cố gắng triển khai vấn đề về chiếc ba lô này bằng cách sử dụng C++ phân nhánh và ràng buộc. Có một phiên bản Java trên trang này: Triển khai nhánh và ràng buộc cho ba lô Tôi đang cố gắng in phiên bản C++ của mình
Có nhiều tình huống mà tôi cần quyền truy cập vào thuật toán băm phù hợp trong C#, từ ghi đè GetHashCode đến thực hiện so sánh/tra cứu nhanh trên dữ liệu. Tôi thấy băm FNV là một thuật toán băm rất đơn giản/tốt/nhanh. Tuy nhiên, tôi chưa bao giờ thấy triển khai C#
Ý tưởng cốt lõi của chiến lược thay thế bộ đệm LRU thư mục không thể áp dụng thuật toán kịch bản triển khai cơ bản tối ưu hóa thuật toán
1. Giới thiệu Trong bài trước chúng tôi đã đề cập đến sự chuyển đổi lẫn nhau của các hệ tọa độ hình chữ nhật trong không gian Khi chuyển đổi tọa độ đo đạc và lập bản đồ, tình huống thường gặp là: chuyển đổi góc nhỏ của hai hệ tọa độ hình chữ nhật. Đây là những gì chúng ta thường sử dụng trong xử lý dữ liệu khảo sát và bản đồ, hệ tọa độ WGS-84, hệ tọa độ 54 Bắc Kinh
Trong quá trình phát triển phần mềm, đôi khi chúng ta cần thường xuyên kiểm tra dữ liệu trong cơ sở dữ liệu và kích hoạt hành động khi tìm thấy dữ liệu mới. Để hiện thực hóa yêu cầu này, chúng tôi tiến hành trình diễn đơn giản trong .Net 7. PeriodicTimer.
Tìm kiếm nhị phân Thuật toán tìm kiếm nhị phân, nói một cách thẳng thắn, là đưa ra một khóa giá trị tồn tại trong mảng theo một mảng có thứ tự, sau đó so sánh nó với giá trị giữa của mảng trước. thực hiện phép so sánh tiếp theo sau đường giữa cho đến khi tìm được. Nếu bằng nhau thì có thể đạt được vị trí của nó.
Tôi là một lập trình viên xuất sắc, rất giỏi!