ইউআরএলকে স্ট্রিংয়ে রূপান্তর করা এবং আবারও


141

তাই আমি একটি রূপান্তরিত হয়েছে NSURLএকটি থেকে String। সুতরাং আমি যদি printlnএটি মত দেখতে file:///Users/...

পরে আমি NSURLএটি আবার চাই এবং তাই নীচের মত দেখতে এটিকে আবার রূপান্তর করতে চেষ্টা করি, তবে উপরের স্ট্রিং সংস্করণে উপস্থিত দুটি ফরোয়ার্ড স্ল্যাশ হারাব, যার ফলে কোডটি urlঅকার্যকর হয়ে যায়।

আমার যে রূপান্তরটি আমি দিচ্ছি তা NSURLথেকে দুটি ফরোয়ার্ড স্ল্যাশ সরিয়ে ফেরাতে কেন ফিরে আসে এবং Stringআমি কীভাবে NSURLতিনটি ফরোয়ার্ড স্ল্যাশযুক্তটিকে আবার রূপান্তর করতে পারি ?

var urlstring: String = recordingsDictionaryArray[selectedRow]["path"] as String
println("the url string = \(urlstring)")
// looks like file:///Users/........etc
var url = NSURL.fileURLWithPath(urlstring)
println("the url = \(url!)")
// looks like file:/Users/......etc

সুইফ্ট 5-এ, স্ট্রিংকে ইউআরএলে রূপান্তর করা হ'ল ফাউন্ডেশন URL URL (স্ট্রিং: "")।
কনিষক গুপ্ত

উত্তর:


122

fileURLWithPath()একটি সরল ফাইল পাথ (যেমন "/ path / to / file") URL এ রূপান্তর করতে ব্যবহৃত হয়। আপনার urlStringস্কিম সহ একটি সম্পূর্ণ URL স্ট্রিং, তাই আপনার ব্যবহার করা উচিত

let url = NSURL(string: urlstring)

এটি আবার রূপান্তর করতে NSURL। উদাহরণ:

let urlstring = "file:///Users/Me/Desktop/Doc.txt"
let url = NSURL(string: urlstring)
println("the url = \(url!)")
// the url = file:///Users/Me/Desktop/Doc.txt

9
চমৎকার। বা এখন সুইফটে:URL(string: urlstring)
ব্রেন্ট ফাউস্ট

1
হতে পারে আপনার "urlstring.removingWhitespaces ()" দরকার, কারণ URL (স্ট্রিংয়ের স্ট্রিং থাকার পরে কাজ করার ক্ষমতা নেই)
কার্লোস প্যারাডা

147

ইন সুইফট 4 এবং সুইফট 3 , URL- এ স্ট্রিং রূপান্তর করতে:

URL(string: String)

বা,

URL.init(string: "yourURLString")

এবং স্ট্রিংয়ে ইউআরএল রূপান্তর করতে:

URL.absoluteString

নীচের একটিটি ইউআরএলের 'বিষয়বস্তু'গুলিকে স্ট্রিংয়ে রূপান্তর করে

String(contentsOf: URL)

25
দ্বিতীয় অংশটি ভুল। String(contentsOf: URL)স্ট্রিং ফর্ম্যাটে URL নয়, সেই সংস্থানটির আসল পেডলোড দেয়। URL.absoluteStringইউআরএল এর স্ট্রিং সংস্করণ পেতে ব্যবহার করুন । বিকাশকারী.অ্যাপল.
com/ রেফারেন্স

4
আপনি স্ট্যাকওভারফ্লো . com/ a/ 39967995/2227743 এর মতোই ভুল করছেন যেখানে আপনি ডাউনলোড করা সামগ্রীকে স্ট্রিংয়ে রূপান্তর করার সাথে ইউআরএলকে নিজেই একটি স্ট্রিংয়ে রূপান্তর করেছেন। আপনার উত্তরের এই অংশটি সরিয়ে নেওয়া উচিত কারণ এটি সম্পূর্ণ ভুল (বা অফ-টপিক, তবে শেষ পর্যন্ত এটি ভুল কারণ এটি প্রশ্নের উত্তর দেয় না)।
এরিক আয়া

1
35+ জন লোক এটিকে দরকারী বলে মনে করেছে এবং এটির উন্নতি করেছে, আমি বরং এটি এটির মতোই রাখতে চাই।
নাইশতা

72

সুইফটে এনএসআরএল থেকে পাথের স্ট্রিং সংস্করণ পাওয়ার একটি দুর্দান্ত উপায় রয়েছে:

let path:String = url.path

5
তবে এটি কেবল /questions/27062454/converting-url-to-string-and-back-againইউআরএল-এ ফিরে আসবে/programming/27062454/converting-url-to-string-and-back-again
ললিত কুমার

1
আপনি যদি অন্য কিছু ফাইলম্যানেজার পদ্ধতির জন্য স্ট্রিং পাথের জন্য পথ ব্যবহার করতে চান তবে এটি আসলেই কার্যকর। তারা file://ফর্ম্যাট পছন্দ করে না ।
বেন ব্যারন

29

বিজ্ঞপ্তি : url এ মনোযোগ দিন, এটি optionalএবং এটি হতে পারে nil। আপনি আপনার ইউআরএলটিকে স্ট্রিংয়ে রূপান্তর করতে উদ্ধৃতিতে আবদ্ধ করতে পারেন। আপনি খেলার মাঠে এটি পরীক্ষা করতে পারেন।
সুইফট 5, এক্সকোড 11 এর জন্য আপডেট:

import Foundation

let urlString = "http://ifconfig.me"
// string to url
let url = URL(string: urlString)
//url to string
let string = "\(url)"
// if you want the path without `file` schema
// let string = "\(url.path)"

1
এটি লক্ষণীয় হওয়া উচিত যে এটিও স্কিমের উপসর্গ (চিন্তাভাবনা file:///Users/foo) প্রদান করে। যদিও যদি কেবল পরম পথটির প্রয়োজন হয় (মনে করুন /Users/foo), তবে url.pathনীচে @ আইপ্যাওর উত্তর হিসাবে ব্যবহার করা উচিত।
আহমেদ খালাফ


14

সুইফট 3 (এনএসআরএল সম্পর্কে ভুলে যান)।

let fileName = "20-01-2017 22:47"
let folderString = "file:///var/mobile/someLongPath"

কোনও স্ট্রিংয়ের বাইরে একটি URL তৈরি করতে:

let folder: URL? = Foundation.URL(string: folderString)
// Optional<URL>
//  ▿ some : file:///var/mobile/someLongPath

আমরা যদি ফাইলের নামটি যুক্ত করতে চাই। দ্রষ্টব্য, যে অ্যাপেনডিংপথ কম্পোনেন্ট () স্বয়ংক্রিয়ভাবে শতাংশ এনকোডিং যুক্ত করে:

let folderWithFilename: URL? = folder?.appendingPathComponent(fileName)
// Optional<URL>
//  ▿ some : file:///var/mobile/someLongPath/20-01-2017%2022:47

যখন আমরা স্ট্রিং করতে চাই কিন্তু মূল অংশটি ছাড়াই (মনোযোগ দিন যে শতাংশের এনকোডিং স্বয়ংক্রিয়ভাবে সরানো হয়েছে):

let folderWithFilename: String? = folderWithFilename.path
// ▿ Optional<String>
//  - some : "/var/mobile/someLongPath/20-01-2017 22:47"

আমরা যদি মূল অংশটি রাখতে চাই তবে আমরা এটি করি (তবে শতাংশ এনকোডিং মনে রাখুন - এটি সরানো হয়নি):

let folderWithFilenameAbsoluteString: String? = folderWithFilenameURL.absoluteString
// ▿ Optional<String>
//  - some : "file:///var/mobile/someLongPath/20-01-2017%2022:47"

স্ট্রিংয়ের জন্য ম্যানুয়ালি শতাংশ এনকোডিং যুক্ত করতে:

let folderWithFilenameAndEncoding: String? = folderWithFilename.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)
// ▿ Optional<String>
//  - some : "/var/mobile/someLongPath/20-01-2017%2022:47"

শতাংশ এনকোডিং অপসারণ করতে:

let folderWithFilenameAbsoluteStringNoEncodig: String? = folderWithFilenameAbsoluteString.removingPercentEncoding
// ▿ Optional<String>
//  - some : "file:///var/mobile/someLongPath/20-01-2017 22:47"

শতাংশ-এনকোডিং গুরুত্বপূর্ণ কারণ নেটওয়ার্কের অনুরোধগুলির জন্য ইউআরএলগুলির তাদের প্রয়োজন হয়, যখন ফাইল সিস্টেমে ইউআরএলগুলি সর্বদা কাজ করে না - এটি প্রকৃত পদ্ধতির উপর নির্ভর করে যা সেগুলি ব্যবহার করে। এখানে সতর্কতাই হ'ল এগুলি সরিয়ে ফেলা বা স্বয়ংক্রিয়ভাবে যুক্ত হতে পারে, তাই এই রূপান্তরগুলি সাবধানতার সাথে আরও ভাল ডিবাগ করুন।


9

সুইফট 3 সংস্করণ কোড:

let urlString = "file:///Users/Documents/Book/Note.txt"
let pathURL = URL(string: urlString)!
print("the url = " + pathURL.path)

4

2020 | সুইফট 5.1:

let url = URL(fileURLWithPath: "//Users/Me/Desktop/Doc.txt")

let a = String(describing: url)       // "file:////Users/Me/Desktop/Doc.txt"
let b = "\(url)"                      // "file:////Users/Me/Desktop/Doc.txt"
let c = url.absoluteString            // "file:////Users/Me/Desktop/Doc.txt"
let d = url.path                      // "/Users/Me/Desktop/Doc.txt" 
// BUT value of `d` will be invisible due to debug process, so...
let e = "\(url.path)"                 // "/Users/Me/Desktop/Doc.txt"

এবং জন্য এক্সটেনশন URL?

extension Optional where Wrapped == URL {
    func toString() -> String {
        guard let val = self else { return "" }

        return "\(val.path)"
    }
}

 ব্যবহার:

let str = optionalUrl.toString() // "/Users/Me/Desktop/Doc.txt"
    str = emptyOptionalUrl.toString() // ""

1

সুইট 3 টি ইউআইওয়েবভিউডেলিগেটের সাথে স্টার্টলডউইড ব্যবহার করা উচিত

  func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

    let urlPath: String = (request.url?.absoluteString)!
    print(urlPath)
    if urlPath.characters.last == "#" {
        return false
    }else{
        return true
    }

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.