iOS开发——技术精华Swift篇&Swift 2.0和Objective-C2.0混编之第三方框架的使用

swift 语言是苹果公司在2014年的WWDC大会上发布的全新的编程语言。Swift语言继承了C语言以及Objective-C的特性,且克服了C语言的兼容性问题。Swift语言采用安全编程模式,且引入了多种新功能,使得编程工作更加简便,灵活!

 

2015年6月9日苹果又一次给所有开发之者带来了一个惊喜,那就是今年年底swift讲开源,者队iOS开发着来说无疑是一个值得兴奋的消息,可是就在这短短的几个月里面swift吸引了越来越多的开发者去学习,不仅仅是iOS开发者。

 

然而,在我们学习和使用swift的时候遇到一个最大的问题就是,之前在使用Objective-C开发iOS程序的时候,有大量的框架可以使用,或者是工具类什么的,而且有些功能实现起来很简单(虽然swift实现也不难),导致开发者不知所错,这个时候苹果的一个非常好的技术就非常有用了(虽然这个技术也是很早就出来了,基本上随着swift1.0出来的,但是那个时候还不够完善),那就是混编,其实就是在swift中编写OC代码,或者在OC中编写swift代码(这种方法很少有人用)。

 

混编是一个很神奇的技术,这里就不多介绍内在含义了,下面我们就来看看在swift怎么编写Objective-C代码:

 

首先,在下面这篇文章中我已经介绍什么怎么为混编做准备(就是关于桥接文件的配置),如果你还不知道去做那么就先看看再来开始接下来的精彩时刻!

http://www.cnblogs.com/iCocos/p/4694563.html

 

 

1:MJRefresh(小码哥出品,质量优保障,哈哈):一个集成下拉刷新和上啦加载更多的非常有名的第三方库

1         self.tableView.addLegendHeaderWithRefreshingTarget(self, refreshingAction: "headRefresh")
2 
3         self.tableView.addGifFooterWithRefreshingTarget(self, refreshingAction: "footRefresh")

 实现相应的监听方法

复制代码
 1  func headRefresh(){ 
 2 
 3         self.Delay(2, closure: { () -> () in
 4 
 5             self.ObjectArray.removeAll(keepCapacity: false)
 6 
 7             self.i = 0
 8 
 9             for self.i ; self.i < 10 ; self.i++ {
10 
11                 self.ObjectArray.append("\(self.i)")
12 
13             }
14 
15             self.tableView.header.endRefreshing()
16 
17             self.tableView.reloadData() 
18 
19         })
20 
21     }
22 
23     func footRefresh(){ 
24 
25         self.Delay(2, closure: { () -> () in
26 
27             var j = self.i + 10
28 
29             for self.i ; self.i < j ; self.i++ {
30 
31                 self.ObjectArray.append("\(self.i)")
32 
33             }
34 
35             self.tableView.footer.endRefreshing()
36 
37             self.tableView.reloadData() 
38 
39         })
40 
41     }
42 
43     func Delay(time:Double,closure:()->()){
44 
45        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64(time * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), closure)
46 
47     }
复制代码

 

 

2:ProgressHUD:指示器

1         ProgressHUD.show("亲爱的,别急嘛~~~")
2 
3  
4 
5         ProgressHUD.showSuccess("人家准备好了!")

  

 还有更多功能清查看相关文章

 

3:PathCover :主页风格

复制代码
 1  var head:XHPathCover!
 2 
 3  
 4 
 5         head = XHPathCover(frame: CGRectMake(0, 0, 320, 200))
 6 
 7         head.setBackgroundImage(UIImage(named: "BG"))
 8 
 9         head.setAvatarImage(UIImage(named: "cute_girl.jpg"))
10 
11         head.isZoomingEffect = true;
12 
13         head.setInfo(NSDictionary(objectsAndKeys: "StrongX",XHUserNameKey,"iOS工程师",XHBirthdayKey)as [NSObject:AnyObject])
14 
15         head.avatarButton.layer.cornerRadius = 33;
16 
17         head.avatarButton.layer.masksToBounds = true
18 
19         head.handleRefreshEvent = {
20 
21             self.headRefresh()
22 
23         }
24 
25         tableView.tableHeaderView = head;
26 
27  
28 
29     func scrollViewDidScroll(scrollView: UIScrollView) {
30 
31         head.scrollViewDidScroll(scrollView)
32 
33     }
34 
35     func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
36 
37         head.scrollViewDidEndDecelerating(scrollView)
38 
39     }
40 
41     func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
42 
43         head.scrollViewDidEndDragging(scrollView, willDecelerate: decelerate)
44 
45     }
46 
47     func scrollViewWillBeginDragging(scrollView: UIScrollView) {
48 
49         head.scrollViewWillBeginDragging(scrollView)
50 
51     }
复制代码

  

 

4:SDWebImage:图片缓存

复制代码
 1         SDImageCache.sharedImageCache().clearDisk()
 2 
 3         SDImageCache.sharedImageCache().clearMemory()
 4 
 5  
 6 
 7         var image = UIImageView(frame: CGRectMake(10, 10, 60, 60))
 8 
 9         image.layer.cornerRadius = 30
10 
11         image.layer.masksToBounds = true
12 
13         image.sd_setImageWithURL(NSURL(string: "http://ac-hn8w3hlp.clouddn.com/fVju6pA4WGzVGNGsVdVXEzB.png"), placeholderImage: UIImage(named: "cute_girl.jpg"))
14 
15         cell.contentView.addSubview(image)
复制代码

 

5:拓展Extension(可以相当于OC中的分类):

复制代码
 1 extension UIView {
 2 
 3     func sayHello(){
 4 
 5         println("哈喽,大家好,欢迎l来到iOS梦工厂”)
 6 
 7     }
 8 
 9  
10 
11 }        
复制代码

 使用:

        head.sayHello()

        

        tableView.sayHello()

 

6:自定义类型:实现画图 

复制代码
 1 import UIKit
 2 
 3  
 4 
 5 class LineView: UIView {
 6 
 7  
 8 
 9    var labelTile = ["动态","关注","粉丝","文章","文集"]
10 
11     override func drawRect(rect: CGRect) {
12 
13         var context = UIGraphicsGetCurrentContext()
14 
15         CGContextSetRGBStrokeColor(context, 0, 0, 0, 0.3)
16 
17         CGContextSetLineWidth(context, 0.5)
18 
19         
20 
21         for var i = 1 ; i <= 4 ; i++ {
22 
23             CGContextMoveToPoint(context, (CGFloat)(i)*rect.width/5, 10)
24 
25             CGContextAddLineToPoint(context, (CGFloat)(i)*rect.width/5, rect.height - 10)
26 
27         }
28 
29         
30 
31         CGContextMoveToPoint(context, 0, 5)
32 
33         CGContextAddLineToPoint(context, rect.width, 5)
34 
35         
36 
37         CGContextMoveToPoint(context, 0, rect.height - 5)
38 
39         CGContextAddLineToPoint(context, rect.width, rect.height - 5)
40 
41         
42 
43         CGContextStrokePath(context)
44 
45  
46 
47     }
48 
49     
50 
51     override init(frame: CGRect) {
52 
53         super.init(frame: frame)
54 
55         self.backgroundColor = UIColor.whiteColor()
56 
57         for var i = 0 ; i<5 ; i++ {
58 
59             var label = UILabel(frame: CGRectMake((CGFloat)(i) * frame.width / 5, frame.height / 3, frame.width / 5, frame.height / 3 * 2))
60 
61             
62 
63             label.text = labelTile[i]
64 
65             label.textColor = UIColor.grayColor()
66 
67             label.font = UIFont.systemFontOfSize(13)
68 
69             label.textAlignment = NSTextAlignment.Center
70 
71             self.addSubview(label)
72 
73             
74 
75         }
76 
77         
78 
79         
80 
81     }
82 
83  
84 
85     required init(coder aDecoder: NSCoder) {
86 
87         fatalError("init(coder:) has not been implemented")
88 
89     }
90 
91  
92 
93 }
94 
95         
96 
97         var Line = LineView(frame: CGRectMake(0, 200, 320, 60))
98 
99        HeadView.addSubview(Line)
复制代码

  

 

7:PhotoBrowser:图片浏览器

复制代码
 1 HZPhotoBrowserDelegate
 2 
 3  
 4 
 5  func PhotoBrowser(){
 6 
 7         var BrowserVC = HZPhotoBrowser()
 8 
 9         BrowserVC.sourceImagesContainerView = head.avatarButton
10 
11         BrowserVC.imageCount = 1
12 
13         BrowserVC.currentImageIndex = 0
14 
15         BrowserVC.delegate = self
16 
17         BrowserVC.show()
18 
19     }
20 
21     func photoBrowser(browser: HZPhotoBrowser!, placeholderImageForIndex index: Int) -> UIImage! {
22 
23         return head.avatarButton.currentImage
24 
25     }
26 
27     func photoBrowser(browser: HZPhotoBrowser!, highQualityImageURLForIndex index: Int) -> NSURL! {
28 
29         var url = NSURL(string: "http://ac-hn8w3hlp.clouddn.com/dGWm2GEFNFoisI6beHBUQjD.png")
30 
31         return url
32 
33     }
复制代码

 

8:XActionSheet:提示框

复制代码
 1 XActionSheetDelegate
 2 
 3         var action = XActionSheet()
 4 
 5         action.delegate = self
 6 
 7         action.addButtonwithTitle("拍照")
 8 
 9         action.addCancelButton("取消")
10 
11         action.addButtonwithTitle("相册")
12 
13         action.addButtonwithTitle("查看高清大图")
14 
15         self .presentViewController(action, animated: true) { () -> Void in
16 
17             
18 
19         }
20 
21     func buttonClick(index: Int) {
22 
23         println("\(index)")
24 
25         if(index == 2){
26 
27             var BrowserVC = HZPhotoBrowser()
28 
29             BrowserVC.sourceImagesContainerView = head.avatarButton
30 
31             BrowserVC.imageCount = 1
32 
33             BrowserVC.currentImageIndex = 0
34 
35             BrowserVC.delegate = self
36 
37             BrowserVC.show()
38 
39         }
40 
41     }
42 
43         var action = XActionSheet()
44 
45         action.delegate = self
46 
47         action.addCancelButtonWithTitle("取消")
48 
49         action.addButtonWithTitle("拍照")
50 
51         action.addButtonWithTitle("相册")
52 
53         action.addButtonWithTitle("查看高清大图")
54 
55         self.presentViewController(action, animated: true) { () -> Void in
56 
57             
58 
59         }
复制代码

  

 

9:DoImage:图片选择器

复制代码
 1 DoImagePickerControllerDelegate
 2 
 3   var picker = DoImagePickerController(nibName: "DoImagePickerController", bundle: nil)
 4 
 5             picker.delegate = self
 6 
 7             picker.nMaxCount = 1
 8 
 9             picker.nColumnCount = 2
10 
11             self.presentViewController(picker, animated: true, completion: nil)
12 
13     func didCancelDoImagePickerController() {
14 
15         self.dismissViewControllerAnimated(true, completion: { () -> Void in
16 
17             
18 
19         })
20 
21     }
22 
23     func didSelectPhotosFromDoImagePickerController(picker: DoImagePickerController!, result aSelected: [AnyObject]!) {
24 
25         var image = aSelected.first as! UIImage
26 
27         head.avatarButton.setImage(image, forState: UIControlState.Normal)
28 
29         self.dismissViewControllerAnimated(true, completion: { () -> Void in
30 
31             
32 
33         })
34 
35     }
复制代码

  

 

10:SwipeableCell:TableView左滑更多按钮

复制代码
 1 SwipeableCellDelegate,SwipeableCellDataSource
 2 
 3  
 4 
 5  cell.delegate = self
 6 
 7         cell.dataSource = self
 8 
 9         cell.setNeedsUpdateConstraints()
10 
11         if(self.isEding .containsObject(indexPath)){
12 
13             cell.openCell(false)
14 
15         }else{
16 
17             cell.closeCell(false)
18 
19         }
20 
21  /**
22 
23     *  SwipeableCellDelegate SwipeableCellDataSource
24 
25     */
26 
27  
28 
29     func swipeableCellDidOpen(cell: SwipeableCell!) {
30 
31         var indexpath = tableView.indexPathForCell(cell) as NSIndexPath!
32 
33         self.isEding.addObject(indexpath)
34 
35     }
36 
37     func swipeableCellDidClose(cell: SwipeableCell!) {
38 
39         var indexpath = tableView.indexPathForCell(cell) as NSIndexPath!
40 
41         self.isEding.removeObject(indexpath)
42 
43     }
44 
45     func swipeableCell(cell: SwipeableCell!, didSelectButtonAtIndex index: Int) {
46 
47         if(index == 0){
48 
49             var indexpath = tableView.indexPathForCell(cell) as NSIndexPath!
50 
51             ObjectArray.removeAtIndex(indexpath.row)
52 
53             self.isEding.removeObject(indexpath)
54 
55             tableView.deleteRowsAtIndexPaths([indexpath], withRowAnimation: UITableViewRowAnimation.Left)
56 
57         }
58 
59         println(index)
60 
61     }
62 
63     func numberOfButtonsInSwipeableCell(cell: SwipeableCell!) -> Int {
64 
65         return 3;
66 
67     }
68 
69  
70 
71     func swipeableCell(cell: SwipeableCell!, buttonForIndex index: Int) -> UIButton! {
72 
73         var btn = UIButton(frame: CGRectMake(0, 0, 60, 60))
74 
75         if(index == 0){
76 
77             btn.backgroundColor = UIColor.redColor()
78 
79             btn.setTitle("删除", forState: UIControlState.Normal)
80 
81         }
82 
83         if(index == 1){
84 
85             btn.backgroundColor = UIColor.blueColor()
86 
87         }
88 
89         if(index == 2){
90 
91             btn.backgroundColor = UIColor.orangeColor()
92 
93         }
94 
95         return btn;
96 
97     }
复制代码

  

11:EAIntroView:新特性引导界面

复制代码
 1 EAIntroDelegate
 2 
 3   func guideView(){
 4 
 5         self.navigationController?.navigationBar.hidden = true
 6 
 7         var page1 = EAIntroPage()
 8 
 9         page1.bgImage = UIImage(named: "image1.jpg")
10 
11         page1.title = "华于形,美于心"
12 
13         page1.titleFont = UIFont.systemFontOfSize(20)
14 
15         page1.titlePositionY = 400
16 
17         page1.desc = "StrongX的美容医院,欢迎你~~"
18 
19         
20 
21         var page2 = EAIntroPage()
22 
23         page2.bgImage = UIImage(named: "image2.jpg")
24 
25         page2.title = "德艺双馨,妙手天成"
26 
27         page2.titlePositionY = 400
28 
29         page2.titleFont = UIFont.systemFontOfSize(20)
30 
31  
32 
33         var page3 = EAIntroPage()
34 
35         page3.bgImage = UIImage(named: "image3.jpg")
36 
37         page3.title = "表面文章,内在功夫"
38 
39         page3.titlePositionY = 400
40 
41         page3.titleFont = UIFont.systemFontOfSize(20)
42 
43  
44 
45         var intro = EAIntroView(frame: self.view.frame, andPages: [page1,page2,page3])
46 
47         intro.delegate = self
48 
49         intro.showInView(self.view)
50 
51     }
52 
53  
54 
55     func introDidFinish(introView: EAIntroView!) {
56 
57         self.navigationController?.navigationBar.hidden = false
58 
59     }
复制代码

  

12:AwesomeMenu:Path菜单

复制代码
 1 AwesomeMenuDelegate
 2 
 3  
 4 
 5  var storyMenuImage = UIImage(named: "bg-menuitem.png")
 6 
 7         var storyMenuImagePressed = UIImage(named: "bg-menuitem-highlighted.png")
 8 
 9         var startImage = UIImage(named: "icon-star")
10 
11         
12 
13         
14 
15         var item1 = AwesomeMenuItem(image: storyMenuImage, highlightedImage: storyMenuImagePressed, contentImage: startImage, highlightedContentImage: nil)
16 
17         var item2 = AwesomeMenuItem(image: storyMenuImage, highlightedImage: storyMenuImagePressed, contentImage: startImage, highlightedContentImage: nil)
18 
19         var item3 = AwesomeMenuItem(image: storyMenuImage, highlightedImage: storyMenuImagePressed, contentImage: startImage, highlightedContentImage: nil)
20 
21         var item4 = AwesomeMenuItem(image: storyMenuImage, highlightedImage: storyMenuImagePressed, contentImage: startImage, highlightedContentImage: nil)
22 
23         var item5 = AwesomeMenuItem(image: storyMenuImage, highlightedImage: storyMenuImagePressed, contentImage: startImage, highlightedContentImage: nil)
24 
25         
26 
27         var addmenu = AwesomeMenuItem(image: UIImage(named: "bg-addbutton.png"), highlightedImage: UIImage(named: "bg-addbutton-highlighted"), contentImage: UIImage(named: "icon-plus"), highlightedContentImage: UIImage(named: "icon-plus-highlighted"))
28 
29         
30 
31         var menu = AwesomeMenu(frame: self.view.frame, startItem: addmenu, menuItems: [item1,item2,item3,item4,item5])
32 
33         menu.delegate = self;
34 
35         self.view.addSubview(menu)
36 
37         
38 
39         menu.rotateAngle = (CGFloat)(M_PI)/2
40 
41         menu.menuWholeAngle = (CGFloat)(M_PI)/2
42 
43         
44 
45         menu.timeOffset = 0.1
46 
47         
48 
49         menu.farRadius = 200
50 
51         menu.nearRadius = 100
52 
53         menu.endRadius = 150
54 
55         
56 
57         
58 
59         
60 
61         
62 
63         
64 
65  
66 
67     func awesomeMenu(menu: AwesomeMenu!, didSelectIndex idx: Int) {
68 
69         println("\(idx)")
70 
71     }
复制代码

 

13:PNGChar:图表

点状图----

复制代码
 1 func LineChart(){
 2 
 3         println("LineChart")
 4 
 5         var LineChart = PNLineChart(frame: CGRectMake(0, 100, 320, 200))
 6 
 7         LineChart.setXLabels(["X1","X2","X3","X4","X5"], withWidth: 50)
 8 
 9         var dataArray = [5,3,1,2,7]
10 
11         var LineData = PNLineChartData()
12 
13         LineData.color = UIColor.redColor()
14 
15         LineData.itemCount = (UInt)(dataArray.count)
16 
17         LineData.getData = ({(index:UInt)->PNLineChartDataItem in
18 
19             var y:CGFloat = (CGFloat)(dataArray[(Int)(index)])
20 
21             return PNLineChartDataItem(y: y)
22 
23         })
24 
25         
26 
27         var dataArray2 = [1,4,5,8,2]
28 
29         var LineData2 = PNLineChartData()
30 
31         LineData2.color = UIColor.blueColor()
32 
33         LineData2.itemCount = (UInt)(dataArray2.count)
34 
35         LineData2.getData = ({(index:UInt)->PNLineChartDataItem in
36 
37             var y:CGFloat = (CGFloat)(dataArray2[(Int)(index)])
38 
39             return PNLineChartDataItem(y: y)
40 
41         })
42 
43         
44 
45         LineChart.chartData = [LineData,LineData2]
46 
47         LineChart.strokeChart()
48 
49         self.view.addSubview(LineChart)
50 
51     }
复制代码

     

柱状图----

复制代码
 1  func BarChart(){
 2 
 3         println("BarChart")
 4 
 5         var barChart = PNBarChart(frame: CGRectMake(0, 100, 320, 200))
 6 
 7         barChart.xLabels = ["X1","X2","X3","X4","X5"]
 8 
 9         barChart.yValues = ["5","1","9","4","6"]
10 
11         barChart.strokeChart()
12 
13         self.view.addSubview(barChart)
14 
15         
16 
17     }
复制代码

  

圆状图----

复制代码
 1  func CircleChart(){
 2 
 3         println("CircleChart")
 4 
 5         
 6 
 7 //        var CircleChart = PNCircleChart(frame: CGRectMake(0, 100, 320, 200), total: NSNumber(double: 100), current: NSNumber(double: 60), clockwise: false)
 8 
 9         var CircleChart = PNCircleChart(frame:  CGRectMake(0, 100, 320, 200), total: NSNumber(double: 100), current: NSNumber(double: 60), clockwise: false, shadow: false, shadowColor: UIColor.redColor())
10 
11         CircleChart.strokeColor = UIColor.blueColor()
12 
13         CircleChart.strokeChart()
14 
15         self.view.addSubview(CircleChart)
16 
17         
18 
19     }
复制代码

  

饼状图----

复制代码
 1  func PieChart(){
 2 
 3         println("PieChart")
 4 
 5         
 6 
 7         var items = [PNPieChartDataItem(value: 10, color: UIColor.grayColor(), description: "小波"),
 8 
 9         PNPieChartDataItem(value: 30, color: UIColor.blueColor()),
10 
11             PNPieChartDataItem(value: 20, color: UIColor.redColor(), description: "StrongX")]
12 
13         
14 
15         var PieChart = PNPieChart(frame: CGRectMake(0, 200, 250, 200), items: items)
16 
17         PieChart.descriptionTextColor = UIColor.whiteColor()
18 
19         PieChart.descriptionTextFont = UIFont.systemFontOfSize(14)
20 
21         PieChart.strokeChart()
22 
23         self.view.addSubview(PieChart)
24 
25         
26 
27     }
复制代码

 

  

 

 

实现图表之后的必备的三步曲

标签:Legend

复制代码
 1   LineData2.dataTitle = "iCocos"
 2 
 3         LineData.dataTitle = "iOS"
 4 
 5         LineChart.legendStyle = PNLegendItemStyle.Serial
 6 
 7         
 8 
 9         var legend = LineChart.getLegendWithMaxWidth(320)
10 
11         legend.frame = CGRectMake(0, 320, 320, 100)
12 
13         self.view.addSubview(legend)
14 
15  
复制代码

 

更新:Updata 

复制代码
 1  var dataArray3 = [3,6,8,12,5]
 2 
 3         var LineData3 = PNLineChartData()
 4 
 5         LineData3.color = UIColor.blueColor()
 6 
 7         LineData3.itemCount = (UInt)(dataArray3.count)
 8 
 9         LineData3.getData = ({(index:UInt)->PNLineChartDataItem in
10 
11             var y:CGFloat = (CGFloat)(dataArray3[(Int)(index)])
12 
13             return PNLineChartDataItem(y: y)
14 
15         })
16 
17         LineData3.dataTitle = "iCocos"
18 
19         LineChart.updateChartData(LineData3, LineData)
20 
21         LineChart.strokeChart()
22 
23         
24 
25         var legend2 = LineChart.getLegendWithMaxWidth(320)
26 
27         legend.frame = CGRectMake(0, 300, 320, 100)
28 
29         self.view.addSubview(legend)
复制代码

 

回调:Callback 

复制代码
 1 LineChart.delegate = self
 2 
 3  
 4 
 5     
 6 
 7     
 8 
 9     /**
10 
11     * Callback method that gets invoked when the user taps on the chart line.
12 
13     */
14 
15     - (void)userClickedOnLinePoint:(CGPoint)point lineIndex:(NSInteger)lineIndex
16 
17     {
18 
19         //实现数据刷新的代码
20 
21     }
22 
23     
24 
25     /**
26 
27     * Callback method that gets invoked when the user taps on a chart line key point.
28 
29     */
30 
31     - (void)userClickedOnLineKeyPoint:(CGPoint)point
32 
33     lineIndex:(NSInteger)lineIndex
34 
35     pointIndex:(NSInteger)pointIndex{
36 
37         //实现数据刷新的代码
38 
39     
40 
41     }
复制代码

  

14:AFN

复制代码
 1 let afn = AFHTTPRequestOperationManager()
 2 
 3 afn.GET("http://www.baidu.com", parameters: nil, success: { (oper, data) -> Void in
 4 
 5     print(data)
 6 
 7 }) { (opeation, error) -> Void in
 8 
 9     print(error)
10 
11 }
复制代码

 

关于网络请求的,AFN作者为神马提供了一个通AFN一样好用的框架Alamofire

复制代码
1 https://api.500px.com/v1/photos").responseJSON() {
2 
3   (_, _, data, _) in
4 
5   println(data)
6 
7  
8 
9  
复制代码

 

 总结:

好了,终于简单粗暴的的总结了一些了,后面笔者会更加深入的学习并且研究相关技术,花更多的时间进行分享相关技术并且优化,因为目前来说使用swift开发app混编时必须会的。

如果你喜欢笔者的文章,请为笔者点赞,欢迎转载!

posted @ 2016-07-25 15:47  专注it  阅读(336)  评论(0编辑  收藏  举报