我想从Swift 语言 的NSMutableArray
中获取部门名称为“Internal Medicine.\n”的所有医生姓名。
(
{
DepartmentName = "Internal Medicine.\n ";
DoctorName = "Dr. A. K. Kundu\n ";
},
{
DepartmentName = "Internal Medicine.\n ";
DoctorName = "Dr. Arvind K. Minz\n ";
},
{
DepartmentName = "Internal Medicine.\n ";
DoctorName = "Dr. Rajeev Choudhary\n ";
},
{
DepartmentName = "Obstetrics And Gynaecology.\n ";
DoctorName = "Dr. Gouri Jain\n ";
},
{
DepartmentName = "Obstetrics And Gynaecology.\n ";
DoctorName = "Dr. Poonam Kataria\n ";
},
{
DepartmentName = "Obstetrics And Gynaecology.\n ";
DoctorName = "Dr. Ila Jha\n ";
},
{
DepartmentName = "Internal Medicine.\n ";
DoctorName = "Dr. Ram Niwas Gupta\n ";
},
{
DepartmentName = "Gasteroenterology.\n ";
DoctorName = "Dr. Sanjay Kumar\n ";
},
{
DepartmentName = "Neurology.\n ";
DoctorName = "Dr. Sameer Gupta\n ";
},
{
DepartmentName = "Physiotherapy And Rehabilitation.\n ";
DoctorName = "Dr. Kapil Chauhan\n ";
},
{
DepartmentName = "XRay.\n ";
DoctorName = "Dr. Gagan Sharma\n ";
}
)
我可以使用 valueforkey
(例如 posts.valueForKey("DoctorName") 或 posts.valueForKey
("Departmentname") 轻松获取所有部门和医生姓名) 和现在我想获取从部门列表中选择部门名称的所有医生姓名
我的完整代码:
import UIKit
import ActionSheetPicker_3_0
class SearchController: UIViewController, NSXMLParserDelegate, UISearchBarDelegate , UITableViewDelegate , UITableViewDataSource {
@IBOutlet weak var selectDepartmentView: UIButton!
@IBOutlet weak var selectDoctorView: UIButton!
var parser = NSXMLParser()
var posts = NSMutableArray()
var DoctorArray = NSMutableArray()
var DepartmentArray = NSMutableArray()
var DoctorArrayAsDepartment = NSMutableArray()
var elements = NSMutableDictionary()
var element = NSString()
var nsArray = NSMutableString()
var nsArray2 = NSMutableString()
var PickValue=""
//=======search bar============
var searchActive : Bool = false
var filtered:[String] = []
//======search Bar===============
var nonMutableArray:[String] = []
@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// self.GetDeartmentsListParsing()
self.GetDocotorListParsing()
// Do any additional setup after loading the view.
searchBar.delegate = self
tableView.delegate = self
tableView.dataSource = self
tableView.tableFooterView = UIView(frame: CGRectZero)
}
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
searchActive = true;
}
func searchBarTextDidEndEditing(searchBar: UISearchBar) {
searchActive = false;
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
searchActive = false;
}
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
searchActive = false;
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
filtered = nonMutableArray.filter({ (text) -> Bool in
let tmp: NSString = text
let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
return range.location != NSNotFound
})
if(filtered.count == 0){
searchActive = false;
} else {
searchActive = true;
}
self.tableView.reloadData()
println("searchText:" + searchText)
// searchBar.text = filtered[indexPath.row]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if(searchActive) {
return filtered.count
}
return nonMutableArray.count;
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as UITableViewCell;
if(searchActive){
cell.textLabel?.text = filtered[indexPath.row]
} else {
cell.textLabel?.text = nil
// nonMutableArray.removeAll()
}
return cell;
}
func GetDocotorListParsing()
{
posts = []
parser = NSXMLParser(contentsOfURL:(NSURL(string:"http://13.192.12.86:201/Api_interfaceTest.aspx?opname=something&PassKey=xyz")))
parser.delegate = self
parser.parse()
println("into GetDoctorListParsing")
}
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String])
{
element = elementName
if (elementName as NSString).isEqualToString("ReturnTable")
{
elements = NSMutableDictionary()
elements = [:]
nsArray = NSMutableString()
nsArray = ""
nsArray2 = NSMutableString()
nsArray2 = ""
}
}
func parser(parser: NSXMLParser!, foundCharacters string: String!)
{
if element.isEqualToString("Departmentname") {
nsArray.appendString(string) // nsArray is NSMutableString
}
else if element.isEqualToString("PersonFullName") {
nsArray2.appendString(string)
}
}
func parser(parser: NSXMLParser!, didEndElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!)
{
if (elementName as NSString).isEqualToString("Departmentname") {
if !nsArray.isEqual(nil) {
elements.setObject(nsArray, forKey: "DepartmentName")
}
if !nsArray2.isEqual(nil) {
elements.setObject(nsArray2, forKey: "DoctorName")
}
posts.addObject(elements)
// ===== This is the posts array i gave output above ===
let myArrayDepartment = (posts.valueForKey("DepartmentName") as? [String])
DepartmentArray = NSMutableArray(array: myArrayDepartment!)
println(DepartmentArray)
let myArrayDoctor = posts.valueForKey("DoctorName") as? [String]
DoctorArray = NSMutableArray(array: myArrayDoctor!)
println(DoctorArray)
nonMutableArray = DoctorArray as AnyObject as [String]
}
}
@IBAction func SelectDoctorButton(sender: AnyObject) {
// Inside a IBAction method:
// Create an array of strings you want to show in the picker:
searchActive = false;
ActionSheetMultipleStringPicker.showPickerWithTitle("Select Department", rows: [
DepartmentArray], initialSelection: [1], doneBlock: {
picker, values, indexes in
print("values = \(values)")
print("indexes = \(indexes)")
print("picker = \(picker)")
var firstValue: AnyObject! = indexes[0]
self.PickValue = firstValue as String
self.selectDepartmentView.setTitle(firstValue as? String, forState: UIControlState.Normal)
for var i=0 ; i<10 ; i++ {
let indexes = (self.posts.valueForKey("DepartmentName"))?.indexOfObject(self.PickValue)
// println("@@@@@sucess@@@@" + index)
NSLog("\(indexes)")
// find(posts.valueForKey("DepartmentName")),"")
}
return
}, cancelBlock: { ActionMultipleStringCancelBlock in return }, origin: sender)
// You can also use self.view if you don't have a sender
}
@IBAction func SelectDoctor(sender: AnyObject) {
tableView.reloadData()
searchActive = false;
ActionSheetMultipleStringPicker.showPickerWithTitle("Select Doctor", rows: [
DoctorArray,
], initialSelection: [1, 1], doneBlock: {
picker, values, indexes in
print("values = \(values)")
print("indexes = \(indexes)")
print("picker = \(picker)")
var firstValue: AnyObject! = indexes[0]
self.PickValue = firstValue as String
self.selectDoctorView.setTitle(firstValue as? String, forState: UIControlState.Normal)
return
}, cancelBlock: { ActionMultipleStringCancelBlock in return }, origin: sender)
}
// Build in Methode
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
self.view.endEditing(true)
}
}
最佳答案
我建议你创建一个名为 Doctor 的新对象
class Doctor: NSObject {
var doctorName = ""
var departmentName = ""
}
这样您就可以轻松地将数据解析为新的 Doctor
并将其像数组一样存储。过滤、查找或做任何事情都会更容易。
希望对您有所帮助。
关于ios - 如何在 swift NSMutableArray 中基于其他元素获取一个元素的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33296216/